用户token过期业务处理+无感刷新(小程序)
-
发生场景,长时间不登录的情况下refreshToken会过期,后台返回401状态码,拦截器处理
1.refreshToken过期情况 如果在refreshToken过期的情况下,响应拦截器的res返回的值会中包含config,通过config可以拿到请求拦截器请求的url基地址, 如果请求的基地址包含'/refreshToken',说明refreshToken过期 解决方案: (1)通过原生方法getCurrentPages()获取页面栈 const pageStack = getCurrentPages() (2)// 从 页面栈中可以获取当前页面的路径 pageStack中拿到route (3)return redirectTo跳转到登录页,重定向到之前的页面,拼接redirectURL为重定向的地址 return wx.redirectTo({ url: '/pages/login/index?redirectURL=/'+currentPage.route})
-
本地用户token过期,刷新
token
1.通过后台接口文档刷新token,axios更新携请求头 携带的请求头为axios的第三个参数,(根据实际文档) 文档要求请求头:Authorization拼接refreshToken, const res2 = await http.post('/refreshToken',{},{ header:{Authorization:'...')} }) 2.得到的返回值res2更新本地token, 可以通过getApp()挂载了设置token方法前提下更新本地token app.setToken('token',res2.data.token) 在响应拦截器response中的res参数包含config,可以拿到请求信息,重新拼接请求头 res.config.header.Authorization = 'Bearer '+服务器返回的最新tokne 3.通过res.config对象重新发送请求 return http(携带修改后的res.config)