# 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。

时序图 · 3 个参与者 / 10 步
alt code 有效code 已用过或超过 5 分钟小程序小程序自己的后端自己的后端微信接口服务微信接口服务wx.login() 拿到 code1发送 code2jscode2session(appid + secret + code)3返回 openid、session_key(满足条件时带 unionid)4查或建用户,session_key 只存服务端5返回自己签发的 token6token 存进 storage7后续请求在 header 里带 token8返回错误码9登录失败,前端重新 wx.login10

unionid和openid

了解小程序登陆之前,我们写了解下小程序/公众号登录涉及到两个最关键的用户标识:

  • OpenId 是一个用户对于一个小程序/公众号的标识,开发者可以通过这个标识识别出用户。
  • UnionId 是一个用户对于同主体微信小程序/公众号/APP的标识,开发者需要在微信开放平台下绑定相同账号的主体。开发者可通过UnionId,实现多个小程序、公众号、甚至APP 之间的数据互通了。

关键Api

  • wx.login 官方提供的登录能力
  • wx.checkSession校验用户当前的session_key是否有效
  • wx.authorize 提前向用户发起授权请求
  • wx.getUserInfo 获取用户基本信息

登录流程设计

  • 利用现有登录体系

直接复用现有系统的登录体系,只需要在小程序端设计用户名,密码/验证码输入页面,便可以简便的实现登录,只需要保持良好的用户体验即可

webapp
公众号
开发者导航
切换夜间模式
点击侧边栏上一篇
点击侧边栏下一篇
折叠侧边栏
收起全部