token无感刷新方法

1.这里推荐去看这个老师的视频,我的方案都是根据他的视频来的视频地址

2.这边使用的工具是axios

import axios from 'axios'
const service = axios.create({
  baseURL: '',
  headers: {
    Authorization: 'token 你自己的token',
  },
  timeout: 1000 * 60,
})

// 拦截响应
service.interceptors.response.use(
  response => {
    return response.data
  },

  error => {
    // 这边判断你的哪个code是要刷新的
    // 也可以写在上面得response里面
    // 这边先做个假设 code = 1004是刷新token
    return new Promise((resolve, reject) => {
      if (error.code === 1004) {
        refreshToken()
          .then(newToken => {
            let config = error.config
            config.headers.Authorization = newToken
            service(config)
              .then(newRes => {
                resolve(newRes)
              })
              .catch(newErr => {
                reject(newErr)
              })
          })
          .catch(newErr => {
            reject(newErr)
          })
      }
    })
  }
)

let promise = null
function refreshToken() {
  if (promise) {
    return promise
  }
  promise = new Promise((resolve, reject) => {
    // 这边是你的刷新token得方法
    // 我假设一个定时器
    setTimeout(() => {
      let token = 'newToken'
      resolve(token)
      // 这边你的刷新token的方法报错的话就按你的想法处理
      // reject('刷新token报错了')
    }, 1000)
  })
  promise.finally(() => {
    promise = null
  })
  return promise
}

export default service

3.思路就是token过期了,先不给返回,刷新了token之后,在请求一遍,然后再返回

4.这是我写的测试的代码,(可能会有错的地方,但是思路是那样的)我实际用的代码和这个思路是一样的,多个请求同时发起,里面是做了判断的=>promise是否为真, 

5.如何各位大佬有其他的方法欢迎指正 ,或者这个思路有漏洞的,也欢迎指正

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是大刚啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值