uniapp请求拦截器加token刷新
时间: 2024-09-21 15:12:16 浏览: 83
UniApp是一个基于Vue.js的跨平台应用开发框架,它允许开发者构建一次,多端部署,包括Web、App、小程序等。在 UniApp 开发中,如果你需要处理每个网络请求前都检查并更新Token(通常用于身份验证),可以设置一个全局的请求拦截器。
以下是在uni-app中添加请求拦截器并处理Token刷新的基本步骤:
1. **创建拦截器**: 首先,在项目中找到`uni-app`生成的`request.js`文件(一般位于`src/api`目录下),或者自定义一个文件来存放公共的网络请求配置。
```javascript
// request.js 或者自定义的请求拦截器文件
import axios from '@/utils/axios'
axios.interceptors.request.use(config => {
// 检查是否有Token并且在Token过期时尝试刷新
const token = localStorage.getItem('your_token_key')
if (token) {
config.headers.Authorization = 'Bearer ' + token
}
// 如果Token即将过期,发起Token刷新请求
const refreshTokenPromise = checkRefreshToken(token)
return refreshTokenPromise.then(() => config).catch(error => Promise.reject(error))
}, error => {
// 对错误做处理,比如记录日志或者显示给用户错误提示
console.error('Request failed with error', error.response.data)
return Promise.reject(error)
})
```
2. **Token刷新函数** (`checkRefreshToken`): 这里假设你有一个服务接口(如`/api/token/refresh`)来进行Token刷新。如果检测到Token快要过期,你需要调用这个接口,并在返回新Token后更新本地存储。
```javascript
function checkRefreshToken(token) {
// 判断当前Token是否即将过期,这里仅作示例
let expirationTime = new Date(token.exp * 1000);
let currentTime = new Date();
let timeDifference = Math.abs(expirationTime - currentTime);
// 如果时间差小于某个阈值,比如5分钟,尝试刷新Token
if (timeDifference < (60 * 5 * 1000)) {
return axios.post('/api/token/refresh', { oldToken: token }).then(res => {
localStorage.setItem('your_token_key', res.data.newToken);
return res.data.newToken;
});
} else {
return Promise.resolve(token); // Token有效,无需刷新
}
}
```
阅读全文