# 1 登录
⚡ 30 秒速记
- 主链路:
wx.login()拿code→ 发给自己后端 → 后端带AppSecret调jscode2session换openid+session_key→ 签发自己的token AppSecret和换票过程只能在后端,session_key也不下发给前端code一次性、5分钟过期,不能缓存复用openid是「这个用户在这个小程序里」的id;多个小程序、公众号、App要认成同一个人得用unionid(同一开放平台下)- 业务登录态是自己的
token,和微信的session_key是两回事;wx.checkSession只管后者
小程序登录就是拿微信给的一次性 code,让自己的后端去微信那换出用户身份,再发一个自己的登录态。 前端只做两件事:调 wx.login() 拿 code 传给后端,拿到后端返回的 token 存起来,后面每个请求都带上。换 openid 必须在后端做,因为要用 AppSecret,放前端等于把小程序的钥匙公开了。openid 只在单个小程序里唯一,如果公司还有公众号、App,要打通账号就要绑同一个开放平台拿 unionid。我还会在请求层统一处理 401,token 过期就静默重新走一遍 wx.login。
unionid和openid
了解小程序登陆之前,我们写了解下小程序/公众号登录涉及到两个最关键的用户标识:
OpenId是一个用户对于一个小程序/公众号的标识,开发者可以通过这个标识识别出用户。UnionId是一个用户对于同主体微信小程序/公众号/APP的标识,开发者需要在微信开放平台下绑定相同账号的主体。开发者可通过UnionId,实现多个小程序、公众号、甚至APP 之间的数据互通了。
关键Api
wx.login官方提供的登录能力wx.checkSession校验用户当前的session_key是否有效wx.authorize提前向用户发起授权请求wx.getUserInfo获取用户基本信息
登录流程设计
- 利用现有登录体系
直接复用现有系统的登录体系,只需要在小程序端设计用户名,密码/验证码输入页面,便可以简便的实现登录,只需要保持良好的用户体验即可