微信小程序登录和授权


登录和授权

登录和授权的说明
  • 在微信小程序中,登录和授权是完全两个独立的事情。登录只是通过 wx.login 获取用户在此时使用小程序产生的 code ,需要通过 Server 将 code 通过 auth.code2Session 获取用户唯一标识。
  • 授权是通过 wx.getUserInfo 来获取用户的微信信息,同时可以通过返回的 vi 等加密数据传给 Server 端,用于解密后存储或校验业务用户的微信信息。
  • 登录和授权完全没有关系
  • 说明

    • 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
    • 调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。
    • 之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。
  • 注意

    • 会话密钥 session_key 是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。
    • 临时登录凭证 code 只能使用一次
用户信息授权
  • 微信小程序用户信息授权
    • 调用 wx.getUserInfo
    • 需要对 button 设置 open-type="getUserInfo" 的属性
    • 将用于加密的数据传递给服务端,如 rawData signature encryptedData iv 等
  • 服务端解密用户授权数据
    • 将小程序业务端通过 wx.getUserInfo 获取到 加密数据进行解密
    • 结合已有的业务用户,创建新的用户或对已有用户补全微信账户相关的信息
手机号授权
  • 获取方式
    • 获取微信用户绑定的手机号,需先调用 wx.login 接口。
    • 因为需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 button 组件的点击来触发。
    • 需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key 以及 app_id 进行解密获取手机号。
  • 注意事项
    • 目前该接口针对非个人开发者,且完成了认证的小程序开放(不包含海外主体)。需谨慎使用,若用户举报较多或被发现在不必要场景下使用,微信有权永久回收该小程序的该接口权限。
    • 在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。
应用建议
  • 注意登录与授权没有必然联系
  • 登录后的 OpenID 是需要通过服务器调用微信接口获取
  • 业务可以根据授权用户信息 + 授权手机号的结合,来创建新的业务用户

静默授权:我们常说的静默授权其实就是通过调用小程序提供的 wx.login 换取 code 后,获取用户 OpenID 以及其他业务关联的信息,因此我们常说的静默授权其实就是不主动调用用户信息授权。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM