拦截器中重新获取到token之后重新发送请求会出现频繁发送请求的事情,怎么解决,让他在获取到token之后只发送一次
时间: 2024-11-03 19:18:50 浏览: 25
在使用拦截器管理Token的刷新时,为了避免频繁地发送请求,通常的做法是在首次请求失败时检查Token是否过期,如果过期了才去尝试获取新的Token。获取新Token后,将新的Token保存并在响应头中设置,然后只需要重新配置后续的请求即可。
以下是一个简化版的示例,使用JavaScript的axios库:
```javascript
const axios = require('axios');
let refreshToken = null; // 存储最新的Token
axios.interceptors.response.use(
response => {
if (response.status === 401 && refreshToken) { // 如果收到401状态码且有refreshToken
// 获取新Token
refreshToken().then(newToken => {
refreshToken = newToken;
// 将新Token设置到响应头中
const config = { headers: { Authorization: `Bearer ${newToken}` } };
axios.defaults.headers.common.Authorization = `Bearer ${newToken}`;
// 重新发送请求
return axios(response.config); // 或者 axios.get(response.config.url, config)
})
.catch(err => console.error('Failed to refresh token:', err));
}
return response;
},
error => {
// 处理其他错误
return Promise.reject(error);
}
);
function refreshToken() {
// 实现你的Token刷新逻辑,例如从服务器或本地存储获取
}
```
这样,一旦Token被刷新并成功更新,后续的所有请求都会使用新Token,除非手动清除`axios.defaults.headers.common.Authorization`。
阅读全文