Angular 拦截http调用

Angular interceptor http call

我有一个从后端获取 JWT 的应用程序。此 JWT 的有效期为 15 分钟。当我将 JWT 从前端发送到后端时,HTTP 拦截器将 JWT 附加到授权 header.

我尝试做的是:

在 Http 拦截器中检查令牌是否仍然有效,如果无效则向后端端点发送请求以获取新的 JWT。

我的问题是:如果我拦截每个附加 header 的调用,如果我在拦截器本身中执行 http 请求,我将进入循环。

这是我的拦截器:

intercept(req: HttpRequest<any>, next: HttpHandler) {
  let authReq = req;
  const token = this.userService.getUserInfo()?.token;
  const jwtHelper: JwtHelperService = new JwtHelperService();
  if (token != null) {
    if (!jwtHelper.isTokenExpired(token)) {
      authReq = req.clone({headers: req.headers.set(TOKEN_HEADER_KEY, 'Bearer ' + token)});
    } else {
      this.authenticationService.getToken();
    return;
    }
  }
  return next.handle(authReq);
}

正确的做法是什么?

服务器应该处理令牌的有效性,这不是客户端的逻辑。

发送带有令牌的请求,如果响应将具有 401/403/任何状态,请发送新令牌请求。