在uniapp中怎么无痛刷新token,详细的步骤是怎么样子的,是怎么请求封装的
时间: 2024-02-24 18:58:18 浏览: 89
retrofit+协程==网络请求框架封装完成,包括loading,刷新token,过滤返回的错误状态码
在uniapp中实现无痛刷新token的步骤一般如下:
1. 在请求拦截器中判断token是否过期,如果过期则进行刷新操作。
2. 刷新操作一般会发送一个特定的请求,比如刷新token的接口。在发送请求时需要携带过期的token,后台会判断token是否过期,如果过期则返回新的token。
3. 在请求成功的回调函数中更新本地保存的token,并重新发起之前的请求,确保用户能够正常访问需要的资源。
4. 在封装请求时,可以通过添加拦截器的方式实现自动刷新token的功能。以下是一个示例代码:
```javascript
import axios from 'axios'
// 创建axios实例
const service = axios.create({
baseURL: process.env.BASE_API, // api的base_url
timeout: 5000 // 请求超时时间
})
// request拦截器
service.interceptors.request.use(config => {
// 判断token是否过期
if (tokenIsExpired()) {
// 刷新token
return refreshToken().then(res => {
// 更新本地token
updateToken(res.data.token)
// 将新的token添加到请求头中
config.headers['Authorization'] = 'Bearer ' + res.data.token
return config
}).catch(err => {
// 刷新token失败,跳转到登录页
redirectToLogin()
})
} else {
// token未过期,直接添加到请求头中
config.headers['Authorization'] = 'Bearer ' + getToken()
return config
}
}, error => {
// 请求错误处理
Promise.reject(error)
})
// response拦截器
service.interceptors.response.use(
response => {
// 请求成功
return response.data
},
error => {
// 请求错误处理
return Promise.reject(error)
}
)
export default service
```
其中,`tokenIsExpired()`函数用于判断token是否过期,`refreshToken()`函数用于发送刷新token的请求,`updateToken()`函数用于更新本地保存的token,`redirectToLogin()`函数用于跳转到登录页。
需要注意的是,以上代码仅为示例代码,具体实现需要根据实际情况进行调整。
阅读全文