# 1 登录

⚡ 30 秒速记

  • 标准流程:wx.login()code → 传给自己的后端 → 后端用 code + AppSecret 调微信接口换 openid/session_key → 后端签发自己的登录态返回前端
  • ⚠️ AppSecret 和换取过程必须在后端 —— 放前端等于把小程序的身份凭证公开
  • code一次性且五分钟过期的,不能缓存复用;每次需要重新登录时都要重新 wx.login()
  • openid 是用户在单个小程序内的唯一标识;跨小程序/公众号要统一身份得用 unionid(需绑定同一开放平台账号)
  • 登录态维护:后端签发 token 存本地,请求时带上;wx.checkSession 可判断 session_key 是否过期

小程序登录的标准链路是客户端调用 wx.login() 获取 code,后端再用它向微信换取 openidsession_key,最后签发自己的 token AppSecret 和凭证校验必须留在服务端,客户端只缓存自定义登录态,并在后续请求中携带。openid 用于识别单个小程序中的用户;多个小程序、公众号或 APP 需要互通时,可在同一开放平台下使用 unionid。还应给本地登录态设置过期时间,并用 wx.checkSession 检查会话是否仍有效。

unionid和openid

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

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

关键Api

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

登录流程设计

  • 利用现有登录体系

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

  • 利用OpenId 创建用户体系

OpenId 是一个小程序对于一个用户的标识,利用这一点我们可以轻松的实现一套基于小程序的用户体系,值得一提的是这种用户体系对用户的打扰最低,可以实现静默登录。具体步骤如下

  • 小程序客户端通过 wx.login 获取 code
  • 传递 code 向服务端,服务端拿到 code 调用微信登录凭证校验接口,微信服务器返回 openid 和会话密钥 session_key ,此时开发者服务端便可以利用 openid 生成用户入库,再向小程序客户端返回自定义登录态
  • 小程序客户端缓存 (通过storage)自定义登录态(token),后续调用接口时携带该登录态作为用户身份标识即可
webapp
公众号
开发者导航
切换夜间模式
点击侧边栏上一篇
点击侧边栏下一篇
折叠侧边栏
收起全部