这两天写了一个无痛刷新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
    }
  }
最后编辑:2022年05月07日 ©著作权归作者所有

发表评论