用到了wechat-http组件库
当服务器返回的状态码为401时
1. 做判断,config.url中是否包含'refreshToken'
1.1 包含,则清空数据,跳转到登录页并携带当前的路径,最后注意要return一个promise.reject()
if (config.url.includes('refreshToken')) {
app.setToken('token', '')
app.setToken('refreshToken', '')
const pages = getCurrentPages()
const curPage = pages[pages.length - 1]
wx.redirectTo({
url: '/pages/login/index?redirectURL=/' + curPage.route,
})
return Promise.reject('登陆过期')
}
1.2 不包含,则向下进行
2. 发请求,使用refreshToken获取新的token和refreshToken
const refreshToken = getApp().getToken('refreshToken')
const res = await http({
url: '/refreshToken',
method: 'POST',
header: {
Authorization: 'Bearer ' + refreshToken
}
})
3. 将新的token和refreshToken存入app和本地
app.setToken('token', res.token)
app.setToken('refreshToken', res.refreshToken)
4. 利用config重新发请求,注意,config中的token还是原来的,需要改一下
config.header = {
Authorization: "bearer " + app.getToken('token')
}
return http(config)
5. 返回数据
注意: 所有分支的最后都要return一个请求结果,不然请求没有结果