【发布时间】:2021-09-26 22:43:16
【问题描述】:
如果当前访问令牌已过期,我正在尝试使用刷新令牌请求新的访问令牌。我为此设置了以下代码
axios.interceptors.response.use(undefined, function(error) {
if (error) {
const originalRequest = error.config;
if (error.response.status === 401 && !originalRequest._retry) {
originalRequest._retry = true;
axios.post("auth/refresh", {
refreshToken: store.state.refreshToken
}).then(res => {
store.dispatch('setToken', res.data.token)
store.dispatch('setRefToken', res.data.refreshToken)
error.config.headers[
"Authorization"
] = `Bearer ${res.data.token}`;
})
} else {
return Promise.reject(error);
}
}
})
这似乎工作并从服务器获取新的访问令牌。 现在的问题是,我需要刷新页面以设置新的 Auth Headers,这并不理想,因为登录的用户可能正在执行操作并且可能不知道在令牌过期后刷新页面。
我怎样才能做到这一点并确保用户不会遇到任何故障?
【问题讨论】:
-
令牌刷新后是否有逻辑重试
originalRequest? -
另外,如果在
axios.post("auth/refresh" ...)在飞行中(在更新令牌之前)发出第二次请求怎么办 - 你最终会得到第二次刷新请求 -
我最初尝试重试 originalRequest,但这并没有解决我的问题......也许我错过了什么。
标签: javascript vue.js axios