我已经开发了一个标准的JWT系统,该系统可以登录并发出访问令牌和刷新令牌。访问令牌会在短时间后过期,并且有一种刷新令牌的途径。
我使用axios
发出请求,但是我不确定如何处理过期的令牌。例如,如果我使用访问令牌向/secret_route
发送请求,并且该请求已过期,是否需要等待403
然后向/refresh_token
发送请求,然后制作原始再次请求?从编程的角度看似乎很混乱,并且在网络上非常浪费。有没有一种有效/优雅的方法来做到这一点?
答案 0 :(得分:0)
最后,我找到了一个比检查时间戳更可靠的解决方案。感谢@Bergi,但我担心系统时钟。我使用axios拦截器来刷新401上的令牌
// Request interceptor for API calls
axios.interceptors.request.use(
async config => {
config.headers = {
'Authorization': `Bearer ${localStorage.getItem("accessToken")}`,
'Accept': 'application/json',
}
return config;
},
error => {
Promise.reject(error)
});
// Allow automatic updating of access token
axios.interceptors.response.use(response => response, async (error) => {
const originalRequest = error.config;
if (error.response.status === 401 && !originalRequest._retry) {
originalRequest._retry = true;
const res = await axios.post('/users/token', { token: localStorage.getItem('refreshToken') });
setToken(res.data.accessToken);
return axios.request(originalRequest);
}
return Promise.reject(error);
});
改编自https://thedutchlab.com/blog/using-axios-interceptors-for-refreshing-your-api-token