微信小程序用户授权
发布于 5 年前 作者 xia69 4367 次浏览 来自 分享

背景

微信小程序只要与用户产生交互,都无法逃离用户信息管理,用户信息授权又是用户信息管理的最基础的服务。如想要深入学习用户授权,需要先了解一下 openID 和 UnionID  的区别。

openID 和 UnionID 

  • openID: openID 是微信生态下`应用的唯一标识`,开发者可以通过微信小程序(微信公众号)提供的静默授权拿到用户的 openID,这两个 openID 是独立的,无法关联到同一个用户。
  • UnionID:UnionID 是微信生态下`用户的唯一标识`,开发者可以通过 UnionID 对不同应用对用户进行唯一绑定。

现在我们只需要记住 openID 是应用的唯一标识,UnionID 是用户的唯一标识就 ok。

用户授权的目标就是获取用户的唯一标识,便于我们的应用更好的管理用户信息,授权分为静默授权和阻断授权。

静默授权

静默授权,顾名思义就是开发者可以在用户无感中的情况下,获取到用户唯一标识(这里是单个应用的),通过这个唯一标识映射到我们系统的 userId,有了 userId,与后端服务的交互全都通了,最简单的用户管理应该哦了。

静默授权的过程是这样的:

  • 调用 wx.login() 获取 临时登录凭证code 
  • 调用 auth.code2Session 接口,换取用户唯一标识 openID 
  • 调用本地后台服务,将 openID 映射到本地的 userId

详情过程可以参考微信官方文档提供的交互图 [猛击查看](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html)

对于只开发微信小程序这一个应用来说,拿到 openID 已经够用了,应用唯一标识就能很好的区分用户。

在实际应用中,我们会用到微信生态中的微信小程序、微信公众号等等,这个时候想在多个应用中唯一标识同一个用户,就需要用到 UnionID。

UnionID可以通过下面途径获取,摘自官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html

  • 调用接口 wx.getUserInfo,从解密数据中获取 UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。
  • 如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户再次授权。
  • 如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过 wx.login + code2Session 获取到该用户 UnionID ,无须用户再次授权。
  • 用户在小程序(暂不支持小游戏)中支付完成后,开发者可以直接通过getPaidUnionId接口获取该用户的 UnionID,无需用户授权。注意:本接口仅在用户支付完成后的5分钟内有效,请开发者妥善处理。
  • 小程序端调用云函数时,如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号,可在云函数中通过 cloud.getWXContext 获取 UnionID。
  • 小程序端调用云函数时,如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用,也可在云函数中通过 cloud.getWXContext 获取 UnionID。

阻断授权

阻断授权顾名思义就是需要用户参与才能完成的授权操作,一般是为了获得用户手机号和用户信息。

用户手机号

具体可以参考访问文档提供的API: [猛击查看](https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html)

用户信息

具体可以参考访问文档提供的API: [猛击查看](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.html)

真实案例

我们用户体系是这样设计的,userId 和 token 共同决定用户的有效性。

  • 静默授权的设计方案

  • 手机号授权设计方法

  • 用户信息授权

不同的业务场景处理方式会有差异,这个也只是针对当下我们的业务场景,希望对你有所有帮助,也欢迎大家一起交流沟通学习。

回到顶部