微信小程序> unionid,小程序:授权、登录、session_key、unionId

unionid,小程序:授权、登录、session_key、unionId

浏览量:1381 时间: 来源:scut_少东
微信应用的一个很大的优势就在于使用过程中是不需要进行注册和显式登录的,大部分问题基本上可以一键解决。但是在授权、登录和获取用户信息的过程中都发生了哪些事情,今天我们就来讨论一下。这篇文章主要分析以下几个问题:
授权和登录的意义session_key的作用unionId的作用,有哪些获取途径在应用中如何保存用户登录态1.授权和登录的意义
首先必须要明白,授权和登录实际上是两个操作。
1.1授权(已废弃)
那授权的作用是啥呢?从小程序官方文档中我们可以看到授权操作只需通过wx.authorize()接口便可以完成,以下是文档中对授权操作的描述:
提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。
也就是说,授权过程实际上只是在小程序前端获得了操作部分wx接口的访问许可,这个过程实际上是不会与开发者服务器发生任何关系的。那这些访问许可包含哪些内容呢?再来看微信官方提供的scope列表:

注:新版api已废弃wx.authorize(),具体信息查看
1.2登录
所谓的登录就是要让开发者服务器知道当前的用户是谁?在传统的web应用中,我们必须要让用户输入账号和密码才能实现登录操作。但是在微信应用中,我们可以通过微信服务器来完成这个操作,获取到与当前用户对应的唯一标志(openId),具体操作实现流程如下:
注:每个用户相对于每个微信应用(公众号或者小程序)的openId是唯一的,也就是说一个用户相对于不同的微信应用会存在不同的openId

从上图中,我们可以看出,小程序中登录步骤如下:
①小程序前端使用wx.login()从微信服务器获取code
②小程序前端将code发送给开发者服务器,开发者服务器利用appId、appSecret和code向微信服务器换换取用户openId和session_key
③开发者服务器自定义登录态并将其与openId和session_key关联起来然后写session
④开发者服务器将登录态返回给小程序前端,小程序前端使用wx.setStorageSync()将登录态保存起来
⑤小程序前端在执行业务请求时将登录态发送给开发者服务器,以便开发者服务器知道当前操作的用户是哪位。
也就是说,在整个过程中小程序前端是拿不到用户openId的,它只能通过开发者服务器发给它的登录态来告诉服务器当前用户的信息。登录过程中涉及session_key和unionId,于是又引出了下面的问题。
2.session_key的作用
那么,session_key在登录的过程中或者登录完成后起什么作用呢?一起来看一下。
2.1wx.getUserInfo
首先来看一下wx.getUserInfo这个api:

在设置withCredentials属性为true的情况下,这个api可以拿到encryptedData,iv等敏感信息,encryptedData需要使用session_key进行解密,解密后可以拿到的数据如下:

也就是说,session_key的作用之一是将小程序前端从微信服务器获取到的encryptedData解密出来,获取到openId和unionId等信息。但是在1.2登录过程中我们可以看到开发者服务器是能够直接拿到用户的openId信息的,而且unionId也是有其他获取途径的,所以session_key在这里的作用看起来有点鸡肋。
2.2getPhoneNumber
session_key更重要的作用大概体现在获取用户手机方面(可能还包含其他敏感信息获取api)。

从文档中可以看到getPhoneNumber返回的用户数据是加密过的,只有使用session_key才能解密,而小程序前端没有session_key,所以无法获取到用户的手机,只能传到开发者服务器进行处理。
3.unionId的作用,有哪些获取途径?关于unionId的作用,可以参考Ref中的连接。简单来说,就是同一用户针对同意微信公众平台下绑定的所有应用都具有相同的unionId。
获取途径有三种,在官方文档中写的比较清楚:

4.在应用中如何保存用户登录态
保存用户登录态,一直以来都有两种解决方案:前端保存和后端保存。
4.1后端保存
在1.2步骤③中写session的时候可以直接设定过期时间,定期通知小程序前端重新进行登录(wx.login)。
4.2前端保存
因为session_key存在时效性问题(毕竟是用来查看敏感信息),而小程序前端可以通过wx.checkSession()来检查session_key是否过期。所以可以通过这个来作为保存用户登录态的机制,这也是小程序文档中推荐的方法:

Ref:
Ref:
Ref:

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎