-
Notifications
You must be signed in to change notification settings - Fork 77
Description
Two requests happened for getting refresh token first one success but second failed and log me out
it's failed due to taking the same exact refresh token in payload not new one
here my interciptor code
/* eslint-disable @typescript-eslint/naming-convention */
import {
HttpInterceptor,
HttpRequest,
HttpHandler,
HttpEvent,
} from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Store } from '@ngrx/store';
import { finalize } from 'rxjs/operators';
import { environment } from 'src/environments/environment';
import { TokenResponse, Requestor } from '@openid/appauth';
import { AuthService } from 'ionic-appauth';
import { from, Observable } from 'rxjs';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
private secureRoutes = environment.secureExternalApis;
private secureExternalRoutes = environment.secureExternalRoutes;
private guestToken = environment.guestToken;
constructor(private authService: AuthService, private appState: Store,
public store: Store,
) { }
private onEnd(): void {
console.log("we end here ")
}
intercept(req: HttpRequest, next: HttpHandler): Observable<HttpEvent> {
// convert promise to observable using 'from' operator
return from(this.handle(req, next))
}
async handle(request: HttpRequest, next: HttpHandler):
Promise<HttpEvent> {
const lang = localStorage.getItem('culture') ?? 'ar';
if (
!this.secureRoutes.find((x) => request.url.startsWith(x))
|| this.guestToken.find((x) => request.url.includes(x))
// && request.withCredentials !== true
) {
if (this.secureExternalRoutes.find((x) => request.url.includes(x))) {
const token: TokenResponse = await this.authService.getValidToken();
// debugger;
request = request.clone({
setHeaders: {
// authorization: `Bearer ${t}`,
authorization: `${(token.tokenType === 'bearer') ? 'Bearer' : token.tokenType} ${token.accessToken}`,
'Accept-Language': lang,
},
});
return next.handle(request).toPromise();;
}
else if (this.guestToken.find((x) => request.url.includes(x))) {
// let token: TokenResponse = await this.getToken();
// if (token && token.accessToken) {
// request = request.clone({
// setHeaders: {
// authorization: `${(token.tokenType === 'bearer') ? 'Bearer' : token.tokenType} ${token.accessToken}`,
// 'Accept-Language': lang,
// },
// });
// }
// else {
let guestUserToken: any = JSON.parse(localStorage.getItem('guestUserToken'));
request = request.clone({
setHeaders: {
authorization: `Bearer ${guestUserToken}`,
// authorization: `${(guestUserToken.token_type === 'bearer') ? 'Bearer' : guestUserToken.token_type} ${guestUserToken.access_token}`,
'Accept-Language': lang,
},
});
//}
return next.handle(request).toPromise();;
}
else {
request = request.clone({
setHeaders: {
'Accept-Language': lang,
},
});
return next.handle(request).toPromise();;
}
}
let token: TokenResponse = await this.getToken();
if (!token) {
request = request.clone({
setHeaders: {
'Accept-Language': lang,
},
});
return next.handle(request).pipe().toPromise();;
}
request = request.clone({
setHeaders: {
// authorization: `Bearer ${token}`,
authorization: `${(token.tokenType === 'bearer') ? 'Bearer' : token.tokenType} ${token.accessToken}`,
'Accept-Language': lang,
},
});
return next.handle(request).pipe().toPromise();
}
async getToken() {
let tokenResponse: TokenResponse = await this.authService.getValidToken(10);
return tokenResponse;
}
getRequest(request: HttpRequest, lang, token) {
if (token && token.accessToken) {
request = request.clone({
setHeaders: {
authorization: ${(token.tokenType === 'bearer') ? 'Bearer' : token.tokenType} ${token.accessToken},
'Accept-Language': lang,
},
});
}
else {
request = request.clone({
setHeaders: {
'Accept-Language': lang,
},
});
}
}
}