当我们使用在小程序中做用户登录的时候, 后台给用户一个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 = baseUrlrequest({url,data,method="GET",header=false,callback=""}){wx.showLoading({    //显示请求提示框title: '请求中',})//如果header为真,则表示该请求在header中要带上token, 如果为假, 则表示请求中可以不用tokenheader = 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 赋值成 resolvethat.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({})  //关闭请求提示框}})})}//得到一个请的tokengetNewToken(){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的接口中,后台返回用户的信息并且带有tokendata:{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}

原文传送

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

  1. java如何判断token过期_【Java】后台判断token过期,后台刷新token,接下来该如何处理...

    如标题所示 我再详细描述一下我遇到的问题,如果我再发送请求的试试,后台验证header中的token,如果这时候,发现token过期,然后一系列判断其为合法token,允许token刷新,后台主动刷新 ...

  2. token 过期后,如何自动续期?

    JWT token的 payload 部分是一个json串,是要传递数据的一组声明,这些声明被JWT标准称为claims. JWT标准里面定义的标准claim包括: iss(Issuser):JWT的 ...

  3. 小程序更换域名后发现图片显示不出来的问题解决方法

    问题描述:小程序更换域名后发现图片显示不出来的问题解决方法 试用范围:微信小程序 基础库 1.0.1 及以上版本 问题描述: 更换域名后发现图片显示不出来,同时微信公众平台配置了新域名,小程序中的ap ...

  4. 微信小程序服务器支付sdk,微信小程序之支付后如何调用SDK的异步通知

    微信小程序之支付后如何调用SDK的异步通知 发布时间:2021-07-05 10:47:33 来源:亿速云 阅读:57 作者:小新 这篇文章主要介绍微信小程序之支付后如何调用SDK的异步通知,文中介绍 ...

  5. 小程序:版本更新后获取用户信息变更

    小程序:版本更新后获取用户信息变更 更新后,以前获取用户信息,是通过wx.getUserInfo,然后就会弹出授权窗口,现在必须通过button ,才能实现: <button open-type ...

  6. Appium 解决微信公众号、小程序切换 webview 后无法定位元素的问题

    Appium 解决微信公众号.小程序切换 webview 后无法定位元素的问题 参考文章: (1)Appium 解决微信公众号.小程序切换 webview 后无法定位元素的问题 (2)https:// ...

  7. 微信小程序「柒留言」 — 无留言公众号开通微信公众号留言功能(建议收藏)

    「柒留言」小程序留言助手使用指南(接近原生界面) 前言 从去年 3 月以后新公众号就没得留言功能了,新申请的微信公众号没有留言功能,没有留言就无法跟读者进行互动,写出去的文章得不到反馈,着实感觉有蛮难 ...

  8. 微信小程序键盘弹起后页面上推问题

    微信小程序键盘弹起后页面上推问题 小程序的 input 组件聚焦后弹起键盘,自动通过页面上移的方式将输入框所在位置定位到键盘上方. 如果输入框本身就位于页面顶端,则不会造成上推. 但是,如果输入框是位 ...

  9. 微信小程序上传后 进行性手机扫码阅览 发现白屏的解决

    目录 问题: 微信小程序上传后 进行性手机扫码阅览 发现白屏的解决 1.上传时没有勾选保护 2.请求的域名没有配置 问题: 微信小程序上传后 进行性手机扫码阅览 发现白屏的解决 1.上传时没有勾选保护 ...

最新文章

  1. java 增量编译_java增量构建关于lambda表达式的问题
  2. 在ECS实例的centos系统中安装Hadoop
  3. Android开发的之基本控件和详解四种布局方式
  4. 微信雄踞,头条社交梦破碎?| 畅言
  5. tomcat 7下spring 4.x mvc集成websocket以及sockjs完全参考指南(含nginx/https支持)
  6. 句柄的本质(整理-收藏) 选择自 feijj2002_ 的 Blog
  7. OpenGl图元基本操作之点选高亮
  8. XP不能访问WIN7资源
  9. linux虚拟机中如何复制粘贴内容到主机
  10. fig r函数_R语言图形函数par()参数应用举例.pdf
  11. 银行会计学3(特点、核算的前提假设、对象和标准)
  12. PDF报表 项目实战总结(集成百度地图+遇到的问题)
  13. 阿里直播平台的架构演进
  14. 数独项目Last弹:网络识别PIAN
  15. ESP32开发路程WIFI篇——极简连接WIFI,模拟设备连接阿里云,ESP32连接阿里云
  16. 一份不悔的爱情 魔兽中那些我们追过的橙色武器_马立杰_新浪博客
  17. 输出青蛙跳台所有路径
  18. 机器学习实战-微额借款用户人品预测
  19. 数据类型与数据结构 文件读写及绘图
  20. 如何在JavaScript中实现国际化(i18n)

热门文章

  1. 【Lesson 11】中古调式、古代名族音乐、小调调式 三者关系梳理
  2. Torch 常用 Tricks 总结
  3. 对txt文件内容按首字母排序
  4. 软件测试找工作去外包大厂项目好还是自研公司好?
  5. 西门子S7-200PLC与V20变频器MODBUS RTU通信教程
  6. 远程操作安卓手机——远控、监控、数据获取
  7. Makefile经典教程(最牛X的教程)
  8. Docker 到底是什么,能干什么?这一篇文章全部给你解释清楚了
  9. Oracle数据库分页查询关键字rownum理解
  10. 《区块链基础知识25讲》-第十八讲-核实并且添加交易数据