token应用 (三) 04-处理401的流程-响应拦截器——处理token失效-回跳地址传递

处理token失效

当前路由对应的路由信息对象https://router.vuejs.org/zh/api/#router-currentroute

  • token 用于访问需要身份认证的普通接口,有效期2小时
  • refresh_token 用于在token过期后,获取新的用户token,有效期14天
    • 它可以获取新的有效token,无需重新登录。

在这里插入图片描述

src/utils/request.js中:

import router from '@/router'
//响应拦截器
instance.interceptors.response.use(res => {
     //剥离一些无用的数据 res ={data:{message:'',data:'需要数据'}}
  return res.data && res.data.data
}, err => {
  // TODO token失效处理
    //进入这个错误的拦截	情况:接口请求错误,token失效的,根本没有登录
       //响应值存在且响应值是401
  if (err.response && err.response.status === 401) {
    // login router  跳转登录的配置   
      //目的:需要query形式传参  进行回跳当前页面的地址.如果是vue组件,用 this.$route.path;但不是,导入router实例——router.currentRoute.path  当前页面的地址
    const login = { path: '/login', query: { redirect: router.currentRoute.path } }
    // 如果token不存在 或者 refreshToken不存在 则未登录
    if (!store.state.auth.token || !store.state.auth.refreshToken) {
        //跳转到登录页面
      return router.push(login)
    }
    // 如果token存在  说明失效
    // 失效后 使用 refresh_token 来获取有效的token
    axios({
      url: 'http://ttapi.research.itcast.cn/app/v1_0/authorizations',
      method: 'put',
      headers: {
        Authorization: `Bearer ${store.state.auth.refreshToken}`
      }
    }).then(res => {
      // 更新token  更新Vuex 
      store.commit('setAuth', res.data.data)
      // 继续发送刚才错误的请求
        //发送请求的时候 需要请求配置 (url,method,基础配置(请求头 拦截器))
           //err.config 指错误请求的配置
      return instance(err.config)
    }).catch(() => {
        //刷新token失效
         //清理无效token
        store.commit('delUser')
        //跳转到登录页面
      return router.push(login)
    })
  }
  return Promise.reject(err)
})
  • 需求:拦截到登录页面后,登录成功后,按来源地址返回
    • 跳转登录页面的时候:在url地址栏带上回跳地址即可

在这里插入图片描述

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值