【发布时间】:2020-10-01 02:04:44
【问题描述】:
所以我对 axios 和上下文相当陌生,但我有一个在 App 级别提供的 Auth 上下文,并且该上下文被多个子组件使用。在这种情况下,我有一个 axios 拦截器,它检查 401(未经授权)的请求,然后调用刷新令牌 api 并将令牌替换为新令牌。我唯一担心的是,第二次调用刷新令牌 API 时,它会进入调用刷新令牌 API 的无限循环吗?任何想法我做错了什么?任何帮助将不胜感激。
AuthContext.js
axios.interceptors.response.use((response) => {
return response
}, function (error) {
const originalRequest = error.config;
if (error.response.status === 401 && originalRequest.url ===
`${BASE_URI}/Identity/Login`) {
history.push('/login');
return Promise.reject(error);
}
if (error.response.status === 401 && !originalRequest._retry) {
originalRequest._retry = true;
const localStorage = JSON.parse(sessionStorage.getItem(AUTH_USER))
const refreshToken = localStorage.refreshToken;
return axios.post(`${BASE_URI}/Identity/Refresh`, null,
{
headers: {
'Refresh-Token': refreshToken
}
})
.then(res => {
if (res.status === 201 || res.status === 200) {
console.log("In refresh request !")
console.log(res)
setSession(null, res.data.token, res.data.refreshToken)
axios.defaults.headers.common['authorization'] = 'Bearer ' + res.data.token;
return axios(originalRequest);
}
}).catch((error) => {
console.log("Inside error refresh")
return Promise.reject(error);
})
}
return Promise.reject(error);
});
【问题讨论】:
标签: reactjs axios react-hooks interceptor react-context