小程序token过期后, 实现无感知的刷新token

这篇具有很好参考价值的文章主要介绍了小程序token过期后, 实现无感知的刷新token。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当我们使用在小程序中做用户登录的时候, 后台给用户一个token, 小程序端用本地缓存token ,以后每次请求的时候,带上这个token 发起请求, 后端解析token中的数据, 查看是否有过期,或其它的错误, 如果正常的话, 后端是可以从这个token中 确认这个请求是哪一个用户发送过来的

一般token过期就重新指引用户登录一下就可以了, 但是,微信小程序是可以实现用户自动登录的。

那么, 当我们的token过期了,该怎么办呢, 封装了一个 用户无感知获取token的 请求类

import {baseUrl} from "../config";  //config 文件中只定义了一个 baseUrl="http://www.mysite.com/api/"
let app = getApp();
class Http{
  baseUrl = baseUrl
 
 
  request({url,data,method="GET",header=false,callback=""}){
    wx.showLoading({    //显示请求提示框
      title: '请求中',
    })
 
    //如果header为真,则表示该请求在header中要带上token, 如果为假, 则表示请求中可以不用token
    header = header ? {token:wx.getStorageSync('token')} : {};
    let that = this;
    return new Promise((resolve,reject)=>{
      wx.request({
        url:that.baseUrl + url,
        data,
        method,
        header,
        success(res){
          
          if(callback){
            callback(res.data);  //这个代码是第二次请求到请的token后才执行的, callback其实是 第一次请求时的 resolve,而res.data是第二次请求时的结果, 这里面有点类似递归的思想
            return;               //这里是有点绕, 自已体会一下, 口才不好,讲不清楚
          }
 
          //如果请求是正确的, 则
          if(res.data.code >=200 && res.data.code <300){
            resolve(res.data);  
          }else if(res.data.code == 401){
            //这里表示token过期, 或者token出错了
            //所以在这里重新请求一个token ,并把它写入的 storage本地缓存中
            that.getNewToken().then((tokenres)=>{   //这个箭头函数中的tokenres 用处不大同下面的说法, 可以不要 ,重要的是我们要再次请求一下 刚才那一个token 过期的请求, 并把callback 赋值成 resolve
              that.request({
                url,
                data,
                method,
                header,
                callback:resolve           //这里是重点, 我们把callback 赋值为resolve,  然后来判断一下 请求中如果有 callback 就把 promise的状态改为 callback 也就是resolve,并且把 数据返回去 
              })
            })
          }else{
            that.showToast(res.data.msg);
            reject(err)
          }
        },
        fail(err){
          console.log(err);
          that.showToast("there is a mistake");
          reject();
        },
        complete(){
          wx.hideLoading({})  //关闭请求提示框
        }
      })
    })
  }
 
  //得到一个请的token
  getNewToken(){
    let that = this;
    return new Promise((resolve,reject)=>{
      wx.login({
        success(res){
          let code = res.code;
          console.log(code);
          wx.request({
            url: that.baseUrl + '/user/login',    //在user/login的接口中,后台返回用户的信息并且带有token
            data:{
              code:code
            },
            success(res){
              console.log(res);
              if(res.data.code == 200){ //这里相当于用户又一次登录,并且得到了一个新的token 并把它写入了 storage本地缓存中
                let token = res.data.data.token;
                wx.setStorageSync("token",token);
                resolve();         //通过Promise的 resolve(),把返回的结果暴露出去  这个暴露好像用处不太大, 可以不用
              }
            },
            fail(err){
              console.log(err)
            }
          })
        }
      }); 
    })
  }
 
  showToast(title,success=false){
    wx.showToast({
      title: title,
      icon:success?"success":"none",
      duration:1500
    })
  }  
}
 
export {Http}

原文传送文章来源地址https://www.toymoban.com/news/detail-511662.html

到了这里,关于小程序token过期后, 实现无感知的刷新token的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序自动刷新token,无感刷新token

            小程序登录开发通常是调用wx.login获取code,然后发送到后台,后台请求微信拿到用户openId,然后根据openId查询用户,有就走登录流程然后返回token,没有则创建用户之后走登录流程然后返回token,也就是都需要返回一个有时效性的token给小程序端,来保持登录状态,

    2024年02月12日
    浏览(28)
  • Token实现登录、token过期解决以及数据解析

    什么是token?         token我们可以理解为一个令牌,主要的作用是守护我们系统的安全,像我们登录这些都是可以使用token进行用户数据校验的,那么为什么不用传统的session呢?主要还是session是前端页面生成给我们的,当某一个窗口关闭了以后或者session发生了变化那么在请

    2023年04月08日
    浏览(30)
  • 【微信小程序】将 token 配置为全局变量,使用定时器来检测 token 过期

    在微信小程序中,你可以将 token 配置为全局变量,并使用定时器来检测 token 是否过期。当 token 过期时,将其设置为 null。 首先,在 app.js 文件中定义一个全局变量 token,并设置初始值为 null,例如: 接下来,在获取 token 的函数中,将获取到的 token 设置为全局变量,并开启一

    2024年02月15日
    浏览(41)
  • 【Uniapp】小程序携带Token请求接口+无感知登录方案2.0

    本次改进原文《【Uniapp】小程序携带Token请求接口+无感知登录方案》,在实际使用过程中我发现以下 bug : 若token恰好在用户访问接口时到期,就会直接查询为空,不反映token过期问题(例如:弹窗显示订单查询记录为空),并不是因为没有数据而是因为token过期了,接口返回

    2024年02月09日
    浏览(28)
  • 【微信小程序】 token 无感刷新

    ⌈本文是作者本人学习过程中的笔记总结,若文中有不正确或需要补充的地方,欢迎在评论区中留言⌋🤖 小程序端登录时,除了返回用户信息,还需返回两个 token 信息 accessToken:用于验证用户身份 refreshToken:用于刷新 accessToken 当请求返回状态码为401(即 accessToken 过期)时

    2024年01月21日
    浏览(28)
  • 转载 spring @Cacheable扩展实现缓存自动过期时间以及自动刷新

    用过spring cache的朋友应该会知道,Spring Cache默认是不支持在@Cacheable上添加过期时间的,虽然可以通过配置缓存容器时统一指定。形如 复制 但有时候我们会更习惯通过注解指定过期时间。今天我们就来聊一下如何扩展@Cacheable实现缓存自动过期以及缓存即将到期自动刷新 2 实现

    2024年02月03日
    浏览(30)
  • sa-token多端登陆实现,PC,APP登陆分别设置token过期时间

    Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。 Sa-Token 目前主要五大功能模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。 登录认证 —— 单端登录、多端

    2024年02月08日
    浏览(32)
  • 无感刷新:Vue前端实现Token的无缝刷新机制

    在现代Web应用程序中,用户身份验证和授权通常使用令牌(Token)机制来实现。然而,由于Token的过期时间限制,用户在长时间使用应用程序时可能需要重新登录。为了提供更好的用户体验,我们可以通过实现Token的无感刷新机制来避免用户在使用过程中的中断。本文将探讨如

    2024年02月10日
    浏览(29)
  • VUE前端实现token的无感刷新

    说实话,这个其实没啥好讲的,要说有复杂度的话,也主要是在后端。 实现token无感刷新对于前端来说是一项十分常用的技术,其本质都是为了优化用户体验,当token过期时不需要用户调回登录页重新登录,而是当token失效时,进行拦截,发送刷新token的请求,获取最新的tok

    2024年02月05日
    浏览(37)
  • 前端实现token的无感刷新--VUE

    token刷新的方案    方案一:后端返回过期时间,前端判断token过期时间,去调用刷新token的接口    缺点:需要后端提供一个token过期时间的字段;使用本地时间判断,若本地时间被修改,本地时间比服务器时间慢,拦截会失败。    方案二:写个定时器,定时刷新token接口

    2024年02月19日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包