三.axios实现无感知刷新token

102 阅读1分钟

背景

当token过期时,通常处理方式跳转登录界面,或者重新获取token,并重新发送当前请求

封装axios拦截

axios拦截器当中可重新执行当前axios实例并重新发送当前请求

var instance1= axios.create({
    baseURL: '/api1,
  timeout: 20000
})

// 请求携带token, 无感知刷新token
handleInterceptorToken(instance1)

function handleInterceptorToken(instance)
  instance.interceptors.request.use(config => {
      // 有些接口不需要token,比如登录
    if (config.noToken) return config
    
    // 请求头添加token
    config.headers.Authorization = 'Bearer ' + store.token

    return config
  })
  instance.interceptors.response.use(response => {
    // token过期, 和后端约定状态码
    if (response.status === 401) {
        // 获取新的token
        await store.login()
        // 执行instance,传入config可重新发送请求
        await instance(response.config)
        //返回状态promise,终止当前任务链
        return new Promise(() => {})
    }

    return response
  })
}

 //使用方式
instance({
    url: '/api/get',
    method: 'GET',
    noToken: true  // 不需要token的请求
})