微信⼩程序 登录

🌙
手机阅读
本文目录结构

问题

微信⼩程序 登录

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 ),后续调⽤接⼝时携带该登录态作为⽤户身份标识即可

利⽤ Unionid 创建⽤户体系

如果想实现多个⼩程序,公众号,已有登录系统的数据互通,可以通过获取到⽤户 unionid 的⽅式建⽴⽤户体系。因为 unionid 在同⼀开放平台下的所所有应⽤都是相同的,通过 unionid 建⽴的⽤户体系即可实现全平台数据的互通,更⽅便的接⼊原有的功能,那如何获取 unionid 呢,有以下两种⽅式

  • 如果户关注了某个相同主体公众号,或曾经在某个相同主体 App 、公众号上进⾏过微信登录授权,通过 wx.login 可以直接获取 到 unionid

  • 结合 wx.getUserInfo 和 <button open-type="getUserInfo"><button/> 这两种⽅式引导⽤户主动授权,主动授权后通过返回的信息和服务端交互 (这⾥有⼀步需要服务端解密数据的过程,很简单,微信提供了示例代码) 即可拿到 unionid 建⽴⽤户体系, 然后由服务端返回登录态,本地记录即可实现登录,附上微信提供的最佳实践

  • 调⽤ wx.login 获取 code ,然后从微信后端换取到 session_key ,⽤于解密getUserInfo 返回的敏感数据

  • 使⽤ wx.getSetting 获取⽤户的授权情况

    • 如果⽤户已经授权,直接调⽤ API wx.getUserInfo 获取⽤户最新的信息;
    • ⽤户未授权,在界⾯中显示⼀个按钮提示⽤户登⼊,当⽤户点击并授权后就获取到⽤户的最新信息
  • 获取到⽤户数据后可以进⾏展示或者发送给⾃⼰的后端。

注意事项

需要获取 unionid 形式的登录体系,在以前(18年4⽉之前)是通过以下这种⽅ 式来实现,但后续微信做了调整(因为⼀进⼊⼩程序,主动弹起各种授权弹窗的这 种形式,⽐较容易导致⽤户流失),调整为必须使⽤按钮引导⽤户主动授权的⽅ 式,这次调整对开发者影响较⼤,开发者需要注意遵守微信的规则,并及时和业务 ⽅沟通业务形式,不要存在侥幸⼼理,以防造成⼩程序不过审等情况

wx.login(获取code) ===> wx.getUserInfo(⽤户授权) ===> 获取 unionid

因为⼩程序不存在 cookie 的概念, 登录态必须缓存在本地,因此强烈建议为登 录态设置过期时间

值得⼀提的是如果需要⽀持⻛控安全校验,多平台登录等功能,可能需要加⼊⼀些 公共参数,例如 platform , channel , deviceParam 等参数。在和服务端确 定⽅案时,作为前端同学应该及时提出这些合理的建议,设计合理的系统。

openid , unionid 不要在接⼝中明⽂传输,这是⼀种危险的⾏为,同时也很 不专业

更多面试题

如果你想了解更多的前端面试题,可以查看本站的WEB前端面试题 ,这里基本包涵了市场上的所有前端方面的面试题,也有一些大公司的面试图,可以让你面试更加顺利。

面试题
HTML CSS JavaScript
jQuery Vue.js React
算法 HTTP Babel
BootStrap Electron Gulp
Node.js 前端经验相关 前端综合
Webpack 微信小程序 -

这些题库还在更新中,如果你有不错的面试题库欢迎分享给我,我整理后放上来;人人为我,我为人人,互帮互助,共同提高,祝大家都拿到心仪的Offer!

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了