用户无感知刷新token

utils/request.js

import store from '@/store'
import router from '@/router'

// 全局响应拦截
instance.interceptors.response.use(function (response) {
  return response
}, async function (error) {
  if (error.response && error.response.status === 401) {
    const refreshToken = store.state.tokenInfo.refresh_token
    if (refreshToken) {
      try {
        const result = await axios({
          method: 'PUT',
          url: 'http://ttapi.research.itcast.cn/app/v1_0/authorizations',
          headers: {
            Authorization: `Bearer ${refreshToken}`
          }
        })
        const newToken = result.data.data.token
        store.commit('setToken', {
          refresh_token: refreshToken,
          token: newToken
        })
        // 重新使用我们之间创建的axios实例,用本次错误请求中的配置项,再发一次
        return instance(error.config)
      } catch {
        // 路由跳转,进入登陆页
        router.push({
          path: '/login',
          query: {
            // currentRoute:表示当前路由
            backto: router.currentRoute.fullPath
          }
        })
      }
    } else {
      // 路由跳转,进入登陆页
      router.push({
        path: '/login',
        query: {
          // currentRoute:表示当前路由
          backto: router.currentRoute.fullPath
        }
      })
    }
  }
  return Promise.reject(error)
})
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容