【发布时间】:2021-01-23 21:43:15
【问题描述】:
我们正在实施基于令牌的身份验证,当用户登录时,我们会生成访问和刷新令牌,然后将其与时间戳一起保存在设备上,以便我们稍后检查访问令牌是否过期。
我们目前在每个请求之前使用 axios 拦截器,并使用我们之前生成访问和刷新令牌时保存的时间戳检查令牌是否仍然有效,但是当访问令牌过期并且我们正在发出请求时要刷新令牌,应用程序会进行无限循环,并且没有任何请求通过(原始令牌 API 请求和刷新令牌 API 请求)。你可以在下面看到我的代码:
const instance = axios.create({
baseURL: 'http://localhost:8080'
});
const refreshToken = () => {
return new Promise((resolve, reject) => {
instance
.post('/token/renew')
.then(response => {
resolve('refresh successful');
})
.catch(error => {
reject(Error(`refresh fail: ${error}`));
});
});
};
instance.interceptors.request.use(
async config => {
const timestamp = 1602155221309;
const diffMinutes = Math.floor(Math.abs(Date.now() - timestamp) / 60000);
// if diffMinutes is greater than 30 minutes
if (diffMinutes > 30) {
const tokenResponse = await refreshToken();
return config;
}
return config;
},
error => {
return Promise.reject(error);
}
);
【问题讨论】:
标签: react-native oauth axios jwt