微信小程序登录态

所谓登录态,就是程序在运行时,能够识别当前用户,能够证明自己的唯一性且合法。

WEB服务器通过浏览器携带的cookie获取session来判断是否是同一用户(或浏览器);Restful服务通过客户端传过来唯一ID,来识别调用用户(传统登录有web服务器提供Session维护, 后端在返回结果给前端web项目时,带上cookie,且以cookie值为key存储用户信息到session中,前端web项目在再以后端返回的结果中,得到相应cookie的值,再一次以同样的方式将cookie值返回给前端浏览器客户端,这样,后面每次浏览器客户端请求时都会带上cookie。)。

微信小程序和以前的web项目不同,他是前后端分离的应用,微信小程序中没有cooike,那么接下来我们来看下小程序如何登录,以及如何维护微信小程序的登录态(Session)。

小程序登录态维护实现流程

  1. 通过wx.login获取登录态。
  2. 通过登录返回的code发送给服务器,服务器用code换取session_key和openid后。
  3. 获取session_key后一般使用缓存框架保存登录态,服务端随机生成一串唯一字符串3rdSessionId为key,session_key为value组成键值对并存到缓存当中,缓存时间视情况自行决定。
  4. 将3rdSessionId返回给客户端
  5. 客户端将3rdSessionId缓存到localStorage中,后续接口从缓存中读取3rdSessionId,传递给服务器;服务器根据3rdSessionId来判断用户身份。
  6. 如果服务器根据3rdSessionId在缓存中查找是否存在session_key,如果存在正常执行;如果不存在小程序未登录,重新从第一步流程走。

微信小程序登录态

登录流程
直接引用官方的登录文档,登录流程图如下图所示:

微信小程序登录态

按照上图流程结合官方api,操作比较简单。本文主要是即在一下如何实现自定义登录态。

下图是在其他博客中看到的一个流程图,感觉总结的很完整。

微信小程序登录态

 其实拿到用户openid,和session_key后,当前登录的账户就在微信的服务器中产生了登录态。但是微信的官方文档提示开发者,为了安全起见,需要第三方服务器自己定义一个登陆态。

查看官方文档时总结以下定义原则:

  • 开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。
  • 当开发者在实现自定义登录态时,可以考虑以session_key有效期作为自身登录态有效期,也可以实现自定义的时效性策略。

官方提示:

  1. 会话** session_key 是对用户数据进行 加密签名 的**。为了应用自身的数据安全,开发者服务器不应该把会话**下发到小程序,也不应该对外提供这个**。
  2. 临时登录凭证 code 只能使用一次

 

暂时总结到这里,以后会继续补充完成的示例。