uniapp 请求拦截刷新token
时间: 2023-05-26 12:05:05 浏览: 217
在uniapp中,可以使用拦截器来实现刷新token的功能。具体步骤如下:
1. 在uniapp项目中创建一个文件夹,例如:”interceptor”。
2. 在该文件夹中创建一个js文件,例如:”index.js”。
3. 在index.js中,导出一个对象并定义一个“request”拦截器。
4. 在“request”拦截器中,判断是否需要刷新token。如果需要刷新token,则发送请求获取新的token,并用新的token替换原有的token,再继续发起原有的请求。
5. 在“request”拦截器中,如果发现token已经过期,则发起请求刷新token,并将新的token保存在本地缓存中。
6. 在uniapp的main.js中,将上述拦截器应用到所有的请求中。
示例代码如下:
// interceptor/index.js
import { getToken, setToken } from '@/utils/token'
export default {
request: function (config) {
// 在发送请求之前做些什么
const token = getToken()
if (token) {
// 如果存在token,则设置请求头中的Authorization字段
config.header.Authorization = token
}
return config;
},
response: function (res) {
// 在请求成功后做些什么
if (res.data.code === 401) {
// token过期了
return refreshRequest(res)
} else {
return res;
}
},
error: function (err) {
// 对请求错误做些什么
return Promise.reject(err);
}
}
function refreshRequest (res) {
return new Promise((resolve, reject) => {
// 刷新token
uni.request({
url: 'http://xxx.com/refresh',
method: 'POST',
header: {
'Content-Type': 'application/json'
'Authorization': getToken()
},
success: (res) => {
if (res.data.code === 0) {
// 刷新token成功
const newToken = res.data.data.token
setToken(newToken) // 保存新的token
// 将新的token替换原有的token
res.config.header.Authorization = newToken
// 再次发起原有的请求
resolve(uni.request(res.config))
} else {
// 刷新token失败
reject(res)
}
},
fail: (err) => {
reject(err)
}
})
})
}
// main.js
import interceptor from '@/interceptor'
// 应用拦截器
uni.addInterceptor(interceptor)
// utils/token.js
const TOKEN_KEY = 'token'
export function getToken () {
return uni.getStorageSync(TOKEN_KEY)
}
export function setToken (token) {
uni.setStorageSync(TOKEN_KEY, token)
}
阅读全文