diff --git a/src/app/interceptors/auth-interceptor.ts b/src/app/interceptors/auth-interceptor.ts index 587272f..0909131 100644 --- a/src/app/interceptors/auth-interceptor.ts +++ b/src/app/interceptors/auth-interceptor.ts @@ -73,14 +73,30 @@ export const AuthInterceptor: HttpInterceptorFn = ( refreshInProgress = true; refreshSubject.next(null); - return authSvc.refreshToken()!.pipe( + const refresh$ = authSvc.refreshToken(); + + // refreshToken() must return an Observable. Otherwise handle gracefully + if (!refresh$) { + refreshInProgress = false; + authSvc.logout(); + return throwError(() => err); + } + + return refresh$.pipe( + switchMap(res => { - refreshInProgress = false; - const newToken = res.accessToken; - authSvc.safeSetToken(newToken); + const newToken = res?.accessToken; + + if (!newToken) { + authSvc.logout(); + return throwError(() => err); + } + + authSvc.safeSetToken(newToken); refreshSubject.next(newToken); + const retryReq = clonedRequest.clone({ headers: clonedRequest.headers.set('Authorization', `Bearer ${newToken}`), withCredentials: true diff --git a/src/app/interceptors/loading-interceptor.ts b/src/app/interceptors/loading-interceptor.ts index 3041755..4bf0024 100644 --- a/src/app/interceptors/loading-interceptor.ts +++ b/src/app/interceptors/loading-interceptor.ts @@ -12,6 +12,10 @@ export const loadingInterceptor: HttpInterceptorFn = ( const loadingSvc = inject(LoaderService); + if(req.url.includes('/RefreshToken')) { + return next(req); + } + totalRequests++; loadingSvc.setLoading(true);