微信小程序授权,获取用户信息

小程序登录

    小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系。

登录流程时序

    

 

wx.login()

获取 临时登录凭证code ,并回传到开发者服务器
  1. 临时登录凭证 code 只能使用一次

auth.code2Session

换取 用户唯一标识 OpenID 和 会话密钥 session_key
  1. 会话密钥 session_key 是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,
  2. 开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥

UnionID 机制

 互通的用户标识

如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,

因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。

换句话说,同一用户,对同一个微信开放平台下的不同应用,UnionID是相同的

小程序迁移到其他的开放平台下,unionID 是会改变的,而 openID 是不变的


    之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份

开发者建议

步骤 作用 备注

1、当用户打开小程序时访问第一个页面时,

先通过 wx.login,获取用户 openID

开发者拿到 openID 可以建立自身的帐号 ID 无需弹框授权
2、拿到 openID 后,判断是新用户还是老用户

老用户,可以直接登录

新用户,可先在首页展示信息服务,再引导下一步操作

 
3、当需要获取用户头像昵称的时候,对用户展示一个登录页面

这个页面只有一个最重要的操作,引导用户进行登录

在页面中加入一个 button 按钮,并将 open-type 属性设置为getUserInfo

  • 使用 open-data 方式或者开放数据域的方式展示用户信息,整个过程无需用户授权
  • 用 button 组件的方式获得用户授权后,调用 wx.getUserInfo 可以获取用户信息
  • 获取过一次之后,用户有可能改昵称头像,为了及时同步,最好定期获取用户信息
  • 用户授权过一次后,又关掉了授权或本地删除了小程序后需要重新获得授权

授权登录(头像,昵称等)

授权方式 解释 建议
一次性授权  

常规写法,

需要获取用户公开信息(头像,昵称等)时,判断调取授权登录接口,

但此方法如果不经处理的话,用户如果拒绝授权或者删除该微信小程序后,需要重新调取并获取授权

此方法用户体验较差,不建议; ×
永久授权

在不必要使用用户公开信息(头像,昵称等)时,不调取授权登录接口,

只有在必要的时候再去判断调取授权登录接口并把获取到的用户公开信息存入数据库

这样在每次登录时直接先运行指定函数从数据库索取需要的用户公开信息(头像,昵称等)即可,

此方法在删除小程序后不用再次去授权登录(因为在用户第一次授权登录时已经把用户的公开信息存入数据库了以后直接向数据库索取即可)

建议使用;

可设置【更新资料】的按钮

不授权

不需要授权登录获取用户公开信息(头像,昵称等),

使用wx.login获取用户code并传入后台,后台可以通过用户的code值向微信要openID,然后通过openID就可以识别到指定用户,

如果需要的话,前端要显示的头像、昵称等这些信息可以使用自定义可编辑的功能,

当然,也可通过<open-data type=“userAvatarUrl”></open-data><open-data type=“userNickName”></open-data>

小程序提供的这个组件显示用户的头像及昵称(不过这个组件只有显示功能),

用户如果想直接使用自己的头像昵称,也可以自行授权(比如添加个引导按钮什么之类的),

建议使用;

 

参考文档:https://developers.weixin.qq.com/community/develop/article/doc/000a4e9d86002857cf687226851413

posted @ 2021-01-10 22:06  SlightFly  阅读(1011)  评论(0编辑  收藏  举报