【问题标题】:Refresh token before time out Angular在Angular超时之前刷新令牌
【发布时间】:2021-05-01 09:37:24
【问题描述】:

我必须刷新令牌,我使用拦截器来执行此操作,但它似乎不起作用。我的函数被调用,但是当 API 返回 HTTP 代码 401 时令牌没有刷新。

服务的功能

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

这里贴出我要刷新的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);
    });
  }
}

【问题讨论】:

    标签: angular token interceptor


    【解决方案1】:

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

    类似:

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

    【讨论】:

      猜你喜欢
      • 2021-11-16
      • 2018-11-07
      • 1970-01-01
      • 2021-04-06
      • 2017-10-11
      • 2016-10-14
      • 2019-07-07
      • 2016-06-23
      • 2020-02-06
      相关资源
      最近更新 更多