这两天写了一个无痛刷新token的例子。
思路是网上查到的,就是创建两个token,一个正常token,一个refreshToken
使用token去查是否过期,如果正常就返回token,前端用这个token去查数据
如果无效就引导到登录页
如果过期了,需要使用refreshToken再试一次
如果refreshToken也出错或者也过期了,那就引导到登录页
如果refreshToken没过期,就调用后端的refresh接口获得新的token和refreshToken,并返回新token去查数据
代码如下:
// 给每个页面的查验或者刷新token服务
static async checkToken () {
// 首先看是不是登录了,如果没有登录,返回false
if (!localStorage.getItem('token')) return false
// 如果有,拿缓存的token去校验一下是否有效
const token = localStorage.getItem('token')
const checkResult = await this.check(token)
// 如果结果不是70009也不是70008,说明token有效,直接返回token
if (checkResult.code !== '70009' && checkResult.code !== '70008') {
return token
}
// 如果token无效,返回false
if (checkResult.code === '70009') return false
// 如果token过期,用freshToken再试一次获得新token
if (checkResult.code === '70008') {
// 使用refreshToken去获取新的token
const refreshToken = localStorage.getItem('refreshToken')
const refreshResult = await this.refresh(refreshToken)
// 如果refreshToken也出错或者过期,重新去登录
if (refreshResult.code === '70009' || refreshResult.code === '70008') {
return false
}
// 刷新成功,更新token,并返回新的token
localStorage.setItem('token', refreshResult.token)
localStorage.setItem('refreshToken', refreshResult.refreshToken)
return refreshResult.token
}
}
最新回复