小程序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 = 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相关推荐
- java如何判断token过期_【Java】后台判断token过期,后台刷新token,接下来该如何处理...
如标题所示 我再详细描述一下我遇到的问题,如果我再发送请求的试试,后台验证header中的token,如果这时候,发现token过期,然后一系列判断其为合法token,允许token刷新,后台主动刷新 ...
- token 过期后,如何自动续期?
JWT token的 payload 部分是一个json串,是要传递数据的一组声明,这些声明被JWT标准称为claims. JWT标准里面定义的标准claim包括: iss(Issuser):JWT的 ...
- 小程序更换域名后发现图片显示不出来的问题解决方法
问题描述:小程序更换域名后发现图片显示不出来的问题解决方法 试用范围:微信小程序 基础库 1.0.1 及以上版本 问题描述: 更换域名后发现图片显示不出来,同时微信公众平台配置了新域名,小程序中的ap ...
- 微信小程序服务器支付sdk,微信小程序之支付后如何调用SDK的异步通知
微信小程序之支付后如何调用SDK的异步通知 发布时间:2021-07-05 10:47:33 来源:亿速云 阅读:57 作者:小新 这篇文章主要介绍微信小程序之支付后如何调用SDK的异步通知,文中介绍 ...
- 小程序:版本更新后获取用户信息变更
小程序:版本更新后获取用户信息变更 更新后,以前获取用户信息,是通过wx.getUserInfo,然后就会弹出授权窗口,现在必须通过button ,才能实现: <button open-type ...
- Appium 解决微信公众号、小程序切换 webview 后无法定位元素的问题
Appium 解决微信公众号.小程序切换 webview 后无法定位元素的问题 参考文章: (1)Appium 解决微信公众号.小程序切换 webview 后无法定位元素的问题 (2)https:// ...
- 微信小程序「柒留言」 — 无留言公众号开通微信公众号留言功能(建议收藏)
「柒留言」小程序留言助手使用指南(接近原生界面) 前言 从去年 3 月以后新公众号就没得留言功能了,新申请的微信公众号没有留言功能,没有留言就无法跟读者进行互动,写出去的文章得不到反馈,着实感觉有蛮难 ...
- 微信小程序键盘弹起后页面上推问题
微信小程序键盘弹起后页面上推问题 小程序的 input 组件聚焦后弹起键盘,自动通过页面上移的方式将输入框所在位置定位到键盘上方. 如果输入框本身就位于页面顶端,则不会造成上推. 但是,如果输入框是位 ...
- 微信小程序上传后 进行性手机扫码阅览 发现白屏的解决
目录 问题: 微信小程序上传后 进行性手机扫码阅览 发现白屏的解决 1.上传时没有勾选保护 2.请求的域名没有配置 问题: 微信小程序上传后 进行性手机扫码阅览 发现白屏的解决 1.上传时没有勾选保护 ...
最新文章
- java 增量编译_java增量构建关于lambda表达式的问题
- 在ECS实例的centos系统中安装Hadoop
- Android开发的之基本控件和详解四种布局方式
- 微信雄踞,头条社交梦破碎?| 畅言
- tomcat 7下spring 4.x mvc集成websocket以及sockjs完全参考指南(含nginx/https支持)
- 句柄的本质(整理-收藏) 选择自 feijj2002_ 的 Blog
- OpenGl图元基本操作之点选高亮
- XP不能访问WIN7资源
- linux虚拟机中如何复制粘贴内容到主机
- fig r函数_R语言图形函数par()参数应用举例.pdf
- 银行会计学3(特点、核算的前提假设、对象和标准)
- PDF报表 项目实战总结(集成百度地图+遇到的问题)
- 阿里直播平台的架构演进
- 数独项目Last弹:网络识别PIAN
- ESP32开发路程WIFI篇——极简连接WIFI,模拟设备连接阿里云,ESP32连接阿里云
- 一份不悔的爱情 魔兽中那些我们追过的橙色武器_马立杰_新浪博客
- 输出青蛙跳台所有路径
- 机器学习实战-微额借款用户人品预测
- 数据类型与数据结构 文件读写及绘图
- 如何在JavaScript中实现国际化(i18n)