在超时前刷新令牌 Angular

Refresh token before time out Angular

我必须刷新令牌,我使用拦截器来完成它,但它似乎不起作用。当 API returns HTTP 代码 401.

时,我的函数被调用但令牌未刷新

服务的功能

  public getToken(): string {
    this.token = localStorage.getItem(TOKEN_KEY);
    return this.token;
  }

这里我post我要刷新的token

refreshToken() {
    console.log(this.token);
    return this.http.post<any>(environment.apiBaseUrl + 'refresh', this.token, httpOptions);
  }

拦截器

 intercept(
    req: HttpRequest<any>,
    next: HttpHandler
  ): Observable<HttpEvent<any>> {
    let authReq = req;
    const token = this.tokenService.getToken();

    if (token) {
      authReq = req.clone({
        headers: req.headers.set(TOKEN_HEADER_KEY, 'Bearer ' + token),
      });
    }
    
    return next.handle(authReq).catch((err: any) => {
      console.log(err);
      if (err instanceof HttpErrorResponse) {
        console.log(err.status);
        console.log(err.statusText);
        if (err.status === 401) {
          this.tokenService.refreshToken();
        }
      }
      return throwError(err);
    });
  }
}

tokenService.refreshToken 中,您需要将令牌存储在 tokenService 中的某处,以便 this.tokenService.getToken() 在以下请求中获取它(或者重试您有重试行为)

类似于:

refreshToken() {
    console.log(this.token);
    this.token = this.http.post<any>(environment.apiBaseUrl + 'refresh', this.token, httpOptions);
  }