refactor: refresh token

The service did not update tokens well, so it was rewritten
This commit is contained in:
2024-08-24 04:27:13 +03:00
parent 48a74ecbf5
commit 1f03c2a9c3
3 changed files with 57 additions and 53 deletions

View File

@ -1,6 +1,6 @@
import {EventEmitter, Injectable} from '@angular/core';
import {Injectable} from '@angular/core';
import {HttpClient, HttpHeaders} from "@angular/common/http";
import {Observable, tap} from "rxjs";
import {map, Observable, throwError} from "rxjs";
import {TokenResponse} from "@api/v1/tokenResponse";
import ApiService from "@api/api.service";
@ -21,7 +21,7 @@ export class AuthToken {
this.endpoint = refreshEndpoint;
}
static httpHeader(token: AuthToken): HttpHeaders {
public static httpHeader(token: AuthToken): HttpHeaders {
let header = new HttpHeaders();
if (token.authProvider === AvailableAuthenticationProvider.Bearer)
@ -35,8 +35,6 @@ export class AuthToken {
providedIn: 'root',
})
export class AuthService {
public expireTokenChange = new EventEmitter<Date>();
constructor(private http: HttpClient) {
}
@ -56,12 +54,12 @@ export class AuthService {
return result <= new Date() ? new Date() : result;
}
public refreshToken(): Observable<TokenResponse> {
public refreshToken(): Observable<Date> {
const token = localStorage.getItem(ApiService.tokenKey);
console.log(token);
if (!token)
throw new Error("token is not found");
return throwError(() => new Error("Token is not found"));
const authToken = JSON.parse(token) as AuthToken;
@ -69,14 +67,16 @@ export class AuthService {
case AvailableAuthenticationProvider.Bearer:
return this.http.get<TokenResponse>(authToken.endpoint, {withCredentials: true})
.pipe(
tap(response => {
map(response => {
const newExpireDate = new Date(response.expiresIn);
const oldExpireDate = new Date(authToken.expiresIn);
if (newExpireDate.getTime() !== oldExpireDate.getTime()) {
AuthService.setToken(response, AvailableAuthenticationProvider.Bearer, authToken.endpoint);
this.expireTokenChange.emit(newExpireDate);
return newExpireDate;
}
return newExpireDate;
})
);
}