typescript - 如何将自定义属性添加到 axios 配置?
问题描述
如果过期,这个拦截器应该刷新我的令牌。
declare module "axios" {
export interface AxiosRequestConfig {
_retry?: boolean;
}
}
axios.interceptors.response.use(
(res) => res,
(error: AxiosError) => {
const originalRequest = error.config;
console.log(originalRequest._retry); // always undefined
if (error?.response?.status === 401 && !originalRequest._retry) {
originalRequest._retry = true;
return axios
.post("/auth/refresh-token", {}, { withCredentials: true })
.then((res) => {
if (res.status === 201) {
return axios(originalRequest);
}
})
}
return Promise.reject(error);
}
);
关键是_retry
我添加到请求配置中的属性,因此它应该防止无限循环。但相反的事情发生了!它创建了一个无限循环,因为_retry
always is undefined
。
我在他们的 Github 页面上发现了一些问题,但没有找到解决方案。
编辑: Su Yu 用最新版本的 axios 尝试了这段代码,它成功了。所以也许这是一个错误。我在 axios 存储库中创建了一个问题: https ://github.com/axios/axios/issues/3920
我有一个问题:如果刷新令牌请求也返回 401 错误怎么办?
最终编辑:最后,我解决了它。我在无限循环中存货,因为如果刷新令牌过期,刷新令牌请求会返回 401 错误。所以我将其更改为 400,一切都按预期工作。我现在要打自己!
解决方案
你用的是哪个版本的axios?似乎 axios 在 0.19.2 上解决了这个问题。您可以检查拉取请求Fixing custom config options。
我已经尝试过最新版本(0.21.1)的 axios,自定义配置工作正常。
推荐阅读
- jupyter - Jupyter Notebook 不吃午饭
- c - 如何将 haskell [char] 转换为 CString
- python-3.x - Python 3 保存文件时出错,由不同的程序打开它并比较列表值
- javascript - Chrome 扩展程序说“阅读您的浏览历史记录”,即使它没有
- java - 如何在java中替换每个字符
- reactjs - 将 JSON 响应绑定到数组时出错 - React
- python - 如何使用networkx绘制流向箭头?
- python - 在 Django 中显示史诗和任务
- javascript - 如何仅通过属性将两个对象分配给一个对象
- laravel - laravel 刀片 @auth 和 @guest