【问题标题】:How to retry API call once JWT token is refreshed?刷新 JWT 令牌后如何重试 API 调用?
【发布时间】:2021-02-16 16:43:16
【问题描述】:

您好,我是 JWT 身份验证前端流程的新手,想知道在颁发新令牌时如何重新发送请求。

据我了解,Auth 令牌应该是短暂的,而 Refresh 令牌的寿命更长。这会导致请求经常因身份验证令牌过期而失败,并且必须使用新的身份验证令牌再次发送请求。

保持这种模式的最佳做法是什么?作为一名 POC,我写了 quick sn-p 来展示我的想法,但我觉得可能有更好的方法。

const API_FETCH_ATTEMPTS = 2; 
const refreshAPI = 'backend/refresh';

function customFetch(url, options, retryAttempts = API_FETCH_ATTEMPTS){

  if (!retryAttempts){
    return null 
  }
  const authToken = localStorage.getItem('auth-token');
  return fetch(url, {...options,'AuthToken': authToken})
    .then()// successful call
    .catch(err => {
      if (err.status === '401'){
        fetch(refreshAPI)
          .then(newToken => {
            localStorage.setItem('authToken', newToken)
            customFetch(url, options, retryAttempts - 1);
          });
      }
    });
}

非常感谢任何想法/帮助。 谢谢!

【问题讨论】:

    标签: authentication jwt refresh-token auth-token


    【解决方案1】:

    你在正确的轨道上:

    • 预计 401 秒
    • 刷新访问令牌
    • 使用新令牌仅重试一次 API 调用
    • 如果令牌刷新失败,重定向用户重新登录

    我的偏好是使用 2 个类:

    • 调用 API 的服务代理
    • 执行 OAuth 工作的身份验证器类

    这是我的一些示例代码,尽管您可以用任何客户端语言实现此设计模式:

    【讨论】:

      猜你喜欢
      • 2019-10-10
      • 2020-12-26
      • 2018-09-13
      • 2017-10-12
      • 2022-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-05
      相关资源
      最近更新 更多