订阅的角度拦截器无法正常工作

时间:2020-10-29 03:34:22

标签: angular angular9

嗨,我创建了一个拦截器,以在令牌过期时刷新令牌。一切都很好,只是当令牌在所有拦截器订阅方法执行之前过期时,调用函数将引发错误。

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(['/']);
          }
        );
      
      }
    }
  });

0 个答案:

没有答案
相关问题