fix:
This commit is contained in:
@ -1,7 +1,8 @@
|
||||
import {BehaviorSubject, interval, Subscription, switchMap} from "rxjs";
|
||||
import {BehaviorSubject, filter, interval, Subscription, switchMap} from "rxjs";
|
||||
import {Injectable} from "@angular/core";
|
||||
import {AuthService} from "@service/auth.service";
|
||||
import {environment} from "@environment";
|
||||
import ApiService from "@api/api.service";
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root',
|
||||
@ -15,12 +16,12 @@ export class TokenRefreshService {
|
||||
this.setRefreshTokenExpireMs(AuthService.tokenExpiresIn.getTime() - 1000 - Date.now());
|
||||
|
||||
authService.tokenChangeError.subscribe(_ => {
|
||||
console.log('Token change error event received');
|
||||
console.debug('Token change error event received');
|
||||
this.tokenRefreshing$.next(false);
|
||||
this.stopTokenRefresh();
|
||||
});
|
||||
authService.expireTokenChange.subscribe(date => {
|
||||
console.log('Expire token change event received:', date);
|
||||
console.debug('Expire token change event received:', date);
|
||||
this.setRefreshTokenExpireMs(date.getTime() - 1000 - Date.now());
|
||||
});
|
||||
}
|
||||
@ -29,22 +30,26 @@ export class TokenRefreshService {
|
||||
if (date)
|
||||
this.refreshTokenExpireMs = new Date(date).getTime() - 1000 - Date.now();
|
||||
|
||||
if (!this.tokenRefreshSubscription || this.tokenRefreshSubscription.closed) {
|
||||
this.tokenRefreshSubscription = interval(this.refreshTokenExpireMs).pipe(
|
||||
switchMap(() => {
|
||||
this.tokenRefreshing$.next(true);
|
||||
return this.authService.refreshToken();
|
||||
})
|
||||
).subscribe({
|
||||
next: (_) => {
|
||||
this.tokenRefreshing$.next(false);
|
||||
},
|
||||
error: error => {
|
||||
console.error('Token refresh error:', error);
|
||||
this.tokenRefreshing$.next(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
console.debug(this.tokenRefreshSubscription);
|
||||
if (this.tokenRefreshSubscription && !this.tokenRefreshSubscription.closed)
|
||||
return;
|
||||
|
||||
this.tokenRefreshSubscription = interval(this.refreshTokenExpireMs).pipe(
|
||||
filter(isRefreshing => !isRefreshing),
|
||||
switchMap(() => {
|
||||
this.tokenRefreshing$.next(true);
|
||||
console.debug('Send query to refresh token');
|
||||
return this.authService.refreshToken();
|
||||
})
|
||||
).subscribe({
|
||||
next: (_) => {
|
||||
this.tokenRefreshing$.next(false);
|
||||
},
|
||||
error: error => {
|
||||
this.tokenRefreshing$.next(false);
|
||||
localStorage.removeItem(ApiService.tokenKey);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public getTokenRefreshing$(): BehaviorSubject<boolean> {
|
||||
@ -60,13 +65,12 @@ export class TokenRefreshService {
|
||||
|
||||
public setRefreshTokenExpireMs(expireMs: number): void {
|
||||
if (expireMs < environment.retryDelay)
|
||||
expireMs = 3000;
|
||||
expireMs = environment.retryDelay;
|
||||
|
||||
console.log(expireMs);
|
||||
this.refreshTokenExpireMs = expireMs;
|
||||
|
||||
console.log(expireMs);
|
||||
this.stopTokenRefresh();
|
||||
this.startTokenRefresh();
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user