token续签--通过响应拦截器判断

4 篇文章 0 订阅
2 篇文章 0 订阅

处理token的方法

export const setToken = ({ key = 'kre-lee', token }) => {
  localStorage.setItem(key, token)
  return localStorage.getItem(key)
}
export const getToken = (key = 'kre-lee') => {
  return localStorage.getItem(key)
}
export const removeToken = (key = 'kre-lee') => {
  localStorage.removeItem(key)
}

逻辑体

axios.interceptors.response.use(function (response) {		

  return response
},
async function (error) {

  // 再次请求refreshToken失败 -- 判断状态码及响应路径判断是refreshToken错误执行这里
  if (error.response.status === 500 && error.request.responseURL === 'http://toutiao.itheima.net/v1_0/authorizations') {
    removeToken()	// 清除本地token
    router.replace('/login')	// 返回登录页面
    Notify({ type: 'warning', message: '身份过期' })	//提示	-- 这里是vant提示组件
		
  } else if (error.response.status === 401) {			// 401表示token过期或错误
    if (getToken('refresh_token')?.length > 0) {	
// 如果本地有'refresh_token'执行这里,?.表示没有length就返回undefined, undefined > 0 === false
// 无感刷新
			// 发起刷新token请求
      const { data: res } = await getNewTokenAPI()
			// 重置本地token
      setToken({ token: res.data.token })
			// 为了使触发error的本次请求继续生效,需要重新给这个请求添加token
      error.config.headers.Authorization = `Bearer ${getToken()}`
			// 将第一请求重新发送出去
      return axios(error.config)
    } else {
 // 用户有感
      removeToken()	// 清除本地token
      router.replace('/login')	// 返回登录页面
      Notify({ type: 'warning', message: '身份过期' })	//提示	-- 这里是vant提示组件
    }
  }
  return Promise.reject(error)	// 判断中中途没return的统一抛出错误
}
)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值