微信小程序登录的实现

微信小程序登录的实现

开发微信小程序必然会涉及到登录功能的实现,不同的技术团队对微信小程序登录实现的方法也不相同,以下是我做过的微信小程序登录实现思路。

  1. 前端在微信小程序的入口方法中通过wx.login()方法获取code,并通过wx.request()方法请求服务端接口将code传给服务端
  2. 服务端得到code后将小程序的appid+appsecret+code一同发送给微信接口服务获取sessio_key和openid等信息,服务端此时会根据openid判断当前的用户的登录状态,如果用户是登录的,直接将sessionId及用户信息传给前端,如果用户是未登录的状态则返回用户的sessionId为空,前端此时就可以判断用户的登录状态
  3. 用户未登录状态下,前端展示手机号一键登录按钮用来获取用户微信绑定的手机号,用户点击按钮获取成功之后将手机号的加密串和openid传给服务端,服务端将手机号的加密串解密后在服务端将登录状态与手机号,openid和session_key关联,自定义登录状态。然后服务端生成一个sessionId,加上其他信息一起返回给前端。
  4. 前端获取到sessionId及用户信息之后存入到storage中。以便每次请求服务端接口时携带sessionId。
  5. 服务端根据前端携带的sessionId查询openid和session_key并查找到相关联的用户,返回业务数据

概述:这种实现方式是前端不存储登录状态,每次进入小程序都会在入口方法中先根据code获取小程序的登录状态,如果登录直接保存服务端返回的登录标志sessionId,如果未登录,则前端只需要获取手机号传给服务端进行登录,也就是只要用户不点击退出登录,用户是一直登录的状态。

改进:(添加关联unionID)通过以上的步骤可以看出整个登录的过程是根据openid来唯一记录登录此小程序的用户的,通过openid就会有一个问题,也就是如果一个公司主体下有多个小程序,则同一用户在这多个小程序下的登录状态是无法进行关联的,也就是无法实现单点登录,然后引入了unionID,因为同一用户,对同一个微信开放平台下的不同应用,UnionID是相同的。实现上在第3步之前增加了一个获取unionID的步骤,前端在获取用户手机号的之前增加了一个获取用户信息的按钮,获取用户信息成功之后将用户信息发送给获取用户unionID的接口,服务端解密用户信息获取unionID返回给前端,前端查看有unionID即隐藏此按钮,表示用户已经和unionID绑定,可以直接点击手机号一键登录获取手机号登录

你可能感兴趣的:(笔记)