前提:
一般微信项目只要涉及到用户授权基本都是和用户唯一标识OpenID
和用户在微信开发平台账号下的唯一标识UnionID
有关,只要项目中需要管理、区分、建立小程序内的用户体系就必须要获取OpenID
、UnionID
。
OpenID
和UnionID
区别
OpenID
: 是微信生态用户唯一标识
,开发者通过微信小程序(微信公众号)提供的静默授权拿到当前用户的 OpenID
,小程序和公众号的OpenID
是独立的。
UnionID
: 是微信生态用户在微信开放平台帐号下的唯一标识UnionID(若当前小程序已绑定到微信开放平台帐号)
,开发者可以通过UnionID
来对不同微信项目下的用户进行关联。如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID
来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的UnionID
是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,UnionID
是相同的。。
按照表现形式不同分为静默授权和弹框授权
静默授权
不弹出授权页面,在用户无感中的情况下,获取到用户唯一标识,通过这个唯一标识映射到我们系统的userId就可以建立用户体系管理用户。
流程:
- 调用
wx.login()
获取 临时登录凭证code
,并回传到开发者服务器。 - 调用
auth.code2Session
接口,换取 用户唯一标识OpenID
、 用户在微信开放平台帐号下的唯一标识UnionID
(若当前小程序已绑定到微信开放平台帐号) 和 会话密钥session_key
。 - 之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。
- 微信官方文档
注意事项:
- 会话密钥
session_key
是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。 - 临时登录凭证
code
只能使用一次
对于只开发微信小程序这一个应用来说,拿到 openID 已经够用了,应用唯一标识就能很好的区分用户。
弹窗授权
需要弹出选项需要用户选择才能完成的授权操作,一般是为了获得用户手机号和用户信息等。