嗨,我创建了一个拦截器,以在令牌过期时刷新令牌。一切都很好,只是当令牌在所有拦截器订阅方法执行之前过期时,调用函数将引发错误。
this._customerService.getCustomers(this._customerSearchComp).subscribe(
(data:any) => {
}
},
(error) => {
this.loader = false;
console.log("Inside error while retrieving customer");
this.notifyService.openSnackBar('error Thrown' + error, 'snackbar-warning');//this error is thrown before the interceptor subscribe method works
}
这是我的拦截器。
return next.handle(request).do((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
}
}, async (err: any) => {
if (err instanceof HttpErrorResponse) {
if (err.status === 401) {
debugger;
let token = this._tokenService.getAuthToken();
let refreshToken=this._tokenService.getRefreshToken();
return this._authenticationService
.refreshToken({
token: token,
refreshToken: refreshToken,
})
.subscribe(
(data: any) => {
debugger;
console.log("Token Refreshed");
this._tokenService.setToken(data.token);
this._tokenService.setRefreshToken(data.refreshToken);
this._tokenService.setRefreshToken(data.refreshToken);
request = request.clone({
headers: request.headers.set(
'Authorization',
'Bearer ' + data.token
),
});
return next.handle(request);
},
(error) => {
this.dialogRef.closeAll();
this.notifyService.isTokenExpired=true;
this._router.navigate(['/']);
}
);
}
}
});