前提:
一般微信项目只要涉及到用户授权基本都是和**用户唯一标识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 已经够用了,应用唯一标识就能很好的区分用户。
弹窗授权
需要弹出选项需要用户选择才能完成的授权操作,一般是为了获得用户手机号和用户信息等。