token的主动介入和失效的被动是怎么处理的?(token失效/超时处理)

token的主动介入和失效的被动是怎么处理的?(token失效/超时处理)

怎么设置本地存储的过期时间?

1.数据第一次存储到本地的时候,除了存我们想要的数据,再存一个时间戳 +new Date() 或者 Date.now()

2.使用本地存储的时候,拿当前时间戳减去第一次存储的时间戳,如果大于规定的时间,则数据失败(过期)

token超时处理-客户端主动介入

1657423627016

主要在请求拦截器中操作:

1.首先去封装存取token的方法setTime getTime

2.在模块里的actions方法里去存时间戳(为什么要在actions里去存时间戳?原因:方便维护)

3.在请求拦截器中去判断时间戳是否过期

3.1定义一个过期时间

// 定义一个过期时间
const timeout = 1000 * 3 // 超时时间(毫秒)

3.2在请求拦截器中判断是否有token的作用域中取出缓存中的时间戳

    // 取出缓存中的时间戳
    const oldTiem = getTime()

3.3 获取当前时间戳

    // 获取当前时间戳
    const newTime = +new Date()

3.4判断时间戳是否过期(前时间戳减去第一次存储的时间戳,如果大于规定的时间,则token过期)

3.5如果过去我们需要清空token,清空用户信息

3.6跳转到登录页

// 如果当前时间戳减去第一次存储的时间戳,如果大于规定的时间,则token过期
    if (newTime - oldTiem > timeout) {
     
     
      // 清空token,清空userInfo
      store.dispatch('user/logout')
      // 跳转到登录页
      router.push('/login')
    }

token超时处理-(后端)被动介入

1657423651893

主要在响应拦截器中操作:

1.在error 信息,去判断里面response的对象

if (error.response && error.response.status === 401) {
     
     
    // 清空token,清空userInfo
    store.dispatch('user/logout')
    // 跳转到登录页
    router.push('/login')
    // 增加用户体验添加中文弹框
    Message.error('token过期')
  } else {
     
     
    Message.error(error.message)
  }

**注意:**这两个可以不用一起使用

两个一起使用可以省略清空tokenstore.dispatch('user/logout')

因为:在主动介入的时候清空token会获取后端返回的401状态码,被动介入阶段又清空的了一次token,所以在被动介入的时候清空就ok了

猜你喜欢

转载自blog.csdn.net/qq_43375584/article/details/125711033