(我已经阅读了类似问题的一些帖子,大多数/全部都建议为刷新令牌请求(与API请求)使用不同的axios实例。然而,我不清楚如何做到这一点,因为我正在使用 axios-auth-refresh自动刷新访问令牌。)
我正在开发一个基于JWT的后端API请求身份验证流程的应用程序。一般流程正常工作,在登录后,用户会得到一个长期刷新令牌和短期访问令牌。使用axios的 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上这里,尽管它与上面的工作版本略有不同。主要是,在GH版本中,钩子调用axios.post("token").then(...)
,而上面我正在进行更明确的调用以添加skipAuthRefresh
参数。添加这个参数让我在控制台中获得了更详细的错误跟踪,但我仍然无法通过catch()
捕获401响应。我已经尝试了我能想到的一切... 有什么东西让我错过了吗?Randy