在 Angular 超时之前刷新令牌 [英] Refresh token before time out Angular

查看:40
本文介绍了在 Angular 超时之前刷新令牌的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have to refresh a token, I use an interceptor to do it but it doesn't seem to work. My function is called but the token isn't refreshed when the API returns the HTTP code 401.

服务的功能

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

我在这里发布我要刷新的令牌

Here I post the token I want to refresh

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() 在以下请求中(或重试您有重试行为)

Inside tokenService.refreshToken you need to store the token somewhere in tokenService for it to be picked up by this.tokenService.getToken() in the following request (or retry of you have retry behavior)

类似于:

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

这篇关于在 Angular 超时之前刷新令牌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆