【发布时间】:2021-06-12 02:36:17
【问题描述】:
(我在这里阅读了许多类似的问题,并且大多数/所有人都说要对刷新令牌请求使用不同的 axios 实例(与 API 请求相比)。但是,我不清楚这将如何工作,因为我使用axios-auth-refresh 自动刷新访问令牌。)
我正在使用基于 JWT 的身份验证流程来处理后端 API 请求的应用。一般流程运行良好;登录后,用户将获得一个长期刷新令牌和短期访问令牌。使用 axios 的axios-auth-refresh 插件,我可以在访问令牌过期时自动刷新它。
我的问题是,当刷新令牌过期时,我无法捕获错误并将用户重定向以重新进行身份验证。我尝试过的任何方法都无法捕捉到错误。自动刷新挂钩的(当前)代码是:
const refreshAuth = (failed) =>
axios({ method: "post", url: "token", skipAuthRefresh: true })
.then(({ status, data: { success, accessToken } }) => {
console.warn(`status=${status}`);
if (!success) Promise.reject(failed);
processToken(accessToken);
// eslint-disable-next-line no-param-reassign
failed.response.config.headers.Authorization = `Bearer ${accessToken}`;
return Promise.resolve();
})
.catch((error) => console.error("%o", error));
createAuthRefreshInterceptor(axios, refreshAuth);
如果刷新令牌过期或丢失,我既看不到status=xxx 控制台行,也看不到catch() 块中的错误对象转储。
实际文件位于 GitHub here,尽管它与上面的工作版本略有不同。主要是,在 GH 版本中,钩子调用 axios.post("token").then(...) 在上面我进行更明确的调用以添加 skipAuthRefresh 参数。添加它让我在控制台中获得了更详细的错误跟踪,但我仍然没有通过catch() 捕捉到 401 响应。
我已经尝试了所有我能想到的东西......有什么东西会跳出来作为我缺少的东西吗?
兰迪
(已编辑以确保 GitHub 链接指向存在问题的文件版本。)
【问题讨论】:
标签: javascript axios jwt