token的主动介入和失效的被动是怎么处理的?(token失效/超时处理)
怎么设置本地存储的过期时间?
1.数据第一次存储到本地的时候,除了存我们想要的数据,再
存一个时间戳
+new Date() 或者 Date.now()2.使用本地存储的时候,拿当前时间戳减去第一次存储的时间戳,如果大于规定的时间,则数据失败(过期)
token超时处理-客户端主动介入
主要在请求拦截器中操作:
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超时处理-(后端)被动介入
主要在响应拦截器中操作:
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) }
**注意:**这两个可以不用一起使用
两个一起使用可以省略清空token
store.dispatch('user/logout')
因为:在主动介入的时候清空token会获取后端返回的401状态码,被动介入阶段又清空的了一次token,所以在被动介入的时候清空就ok了