小程序如何实现无感刷新token

当接收到401状态码时,检查是否因refreshToken过期导致。如果是,则使用wx.redirectTo将用户重定向到登录页。否则,使用refreshToken获取新token并更新。之后,使用新token重新发起请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 //后端给了两个token和refreshtoken 将两个token存到本地
 if (statusCode === 401) {
//获取小程序实力
      const app = getApp()
       //如果refreshtoken也过期了就打回到登录页
      if (config.url.includes('/refreshToken')) {
        // 这一次的 401 是由于调用刷新 token 的接口的时候,refreshToken 过期导致的
            //是一个访问页面历史记录的数组
        const currentPages = getCurrentPages()
            // 数组的长度-1就是当前页面
        const currentPage = currentPages[currentPages.length - 1]
        // currentPage.route 当前页面的地址  
        return wx.redirectTo({
                                  //把当前页面带过去,好再回到当前页面
          url: `/pages/login/index?redirectUrl=/${currentPage.route}`,
        })
      }
   // token 过期了,用 refreshToken 换取新的 token
      const {
        data
      } = await wx.http({
        url: '/refreshToken',
        method: 'POST',
        header: {
          Authorization: app.refresh_token
        }
      })
      // data里面包含了 token 和 refresh_token,只需要再次调用 app.setToken 方法进行存储
      app.setToken(data.token, data.refreshToken)
         //config里面就有原本发的请求方法只不过token是坏的需要一个新的token
           console.log(config);
      const allConfig = Object.assign({}, config, {
        header: {
          Authorization: 'Bearer ' + data.token
        }
      })
      return wx.http(allConfig)
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值