panda-chat-room

继上节「理解小程序 session」 ,本节我们以 jsonwebtoken 来实现小程序端的用户状态标识。如果你对小程序用户登录流程及 session 管理还有些疑惑,可以参考本节实现自己的小程序登录方案。

本节我们用 JWT 实现小程序本地用户标识

依然是从前端到后端, JWT 即 jsonwebtoken 是一种无状态化的认证手段。 在本节中我们采取 JWT 来达到在本地标识小程序用户的目的「作用类似于 session」。

  1. JWT 是保存在小程序端的用户标识
  2. JWT 不是一种保密措施,但它却是防篡改的「但是如果别人拿到了你的 JWT, 他就能冒充你」
  3. 在服务器端我们不维护任何状态, 服务器只负责生成、解密、验证 JWT
目录结构:

前端小程序

  1. 前端 utils 文件为一些常用的工具函数
  2. 前端 services 为微信登录函数

后端 koa

  1. token.js JWT 的各类操作
  2. doLogin.js 与微信服务器的交互,用于解密验证用户信息,用户信息写库、生成 JWT
  3. weixin.js 微信用户的解密算法

资料

JSON Web Token - 在Web应用间安全地传递信息

理解JWT的使用场景和优劣

注意事项

此 demo 中的所有配置信息有可能随时失效
源码

用 JWT 实现小程序本地用户标识的更多相关文章

  1. 微信小程序本地引用iconfont(阿里巴巴矢量图标库)

    好,忙,我懂..... 首先把图标放进项目里(废话): 接下来把这些图标下载到本地(这里不介绍网络途径了,下载就完事了) 然后利用一个网站将这个ttf文件转成base64文件https://trans ...

  2. 微信小程序 本地缓存保持登录状态之wx.setStorageSync()使用技巧

    微信小程序提供了一个如同浏览器cookie本地缓存方法,那就是今天要说的wx.setStorageSync() 注意,该方法是同步请求,还有个异步请求的方法是wx.setStorage(),参考官方文 ...

  3. 用Nginx实现微信小程序本地SSL请求

    我们在开发小程序的时候,需要填写一个授权域名.还要有一个证书.这些都是花钱的.开发非常不方便.本文主要讲解配置ssl和本地开发 小程序后台添加授权域名 这个域名你要写一个是备案过的.具体是不是你的,都 ...

  4. 小程序本地存储之wx.getStorageSync

    这个主要可以解决微信小程序的记录缓存,入输入框的搜索历史记录 直接上代码 setsearchMsg:function(){ var that=this if (this.data.inputValue ...

  5. js和微信小程序本地获取东八北京时间

    changeCount(){ // 目标时区,东8区 const targetTimezone = -8; // 当前时区与中时区时差,以min为维度 const dif = new Date().g ...

  6. 微信小程序本地的域名“不在以下request合法域名列表中”错误处理方法

  7. 小程序本地资源无法通过 css 获取

    background-image:可以使用网络图片,或者 base64,或者使用<image/>标签

  8. 微信小程序本地缓存

  9. 微信小程序之本地缓存(十)

    [未经作者本人同意,请勿以任何形式转载] 目前,微信给每个小程序提供了10M的本地缓存空间(哎哟妈呀好大) 有了本地缓存,你的小程序可以做到: 离线应用(已测试在无网络的情况下,可以操作缓存数据) 流 ...

随机推荐

  1. Java中的单利模式

    单利模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创 ...

  2. 【Azure API 管理】使用APIM进行XML内容读取时遇见的诡异错误 Expression evaluation failed. Object reference not set to an instance of an object.

    问题描述 使用APIM,在 Inbound 中对请求的Body内容进行解析.客户端请求所传递的Request Body为XML格式,需要从Request Body中解析出多个(Element)节点值, ...

  3. pthon语法

    1.条件语句 #找到a.b.c中最大的数,其中and是逻辑运算符"且"的意思 if a>b and a>c: print(a) elif b>a and b> ...

  4. Java 代码注意细节

    代码优化的目标是: 1.减小代码的体积 2.提高代码运行的效率 代码优化细节 1.尽量指定类.方法的final修饰符 带有final修饰符的类是不可派生的.在Java核心API中,有许多应用final ...

  5. &取地址运算符

    &可以取得一个变量在内存当中的地址 Register int a; //这种变量不在内存里面,而在CPU里面,是没有地址的, 所以寄存器变量(register)不能用&来取得变量 在计 ...

  6. Hash链表转换为红黑树,和树转换为链表的条件

    链表转换位红黑树 两个条件,必须同时满足两个条件才能进行转换 条件1:单个链表长度大于等于8 条件2:hashMap的总长度大于64个.且树化的节点位置不能为空 从源码看 条件一: 在putVal() ...

  7. Java的自动装箱与拆箱(Autoboxing and unboxing)

    一.什么是自动装箱拆箱 很简单,下面两句代码就可以看到装箱和拆箱过程 1 //自动装箱 2 Integer total = 99; 3 4 //自动拆箱 5 int totalprim = total ...

  8. sql注入之查询方式及报错注入

    当进行sql注入时,有很多注入会出无回显的情况,其中不回显的原因可能是sql语句查询方式的问题导致的,这个时候我们需要用到相关的报错或盲注进行后续操作,同时作为手工注入时,提前了解或预知器sqkl语句 ...

  9. 关于IIS应用程序池的默认参数设置解决

    关于IIS应用程序池的默认参数设置,一般如下设置以满足IIS站点的需要. 1.关于IIS站点的启动模式,以及处理请求的管道模式设置. 2.回收机制设置, A)若IIS站点程序中存在单例模式访问DB数据 ...

  10. Linux下mysql的彻底卸载

    1.查看mysql的安装情况 rpm -qa | grep -i mysql 2.删除上图安装的软件 rpm -ev mysql-community-libs-5.7.27-1.el6.x86_64 ...