小程序:授权、登录、session_key、unionId的详解

 更新时间:2019年05月15日 09:38:01   作者:scut_少东  
这篇文章主要介绍了小程序:授权、登录、session_key、unionId的详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

微信应用的一个很大的优势就在于使用过程中是不需要进行注册和显式登录的,大部分问题基本上可以一键解决。但是在授权、登录和获取用户信息的过程中都发生了哪些事情,今天我们就来讨论一下。这篇文章主要分析以下几个问题:

  1. 授权和登录的意义
  2. session_key 的作用
  3. unionId 的作用,有哪些获取途径
  4. 在应用中如何保存用户登录态

1. 授权和登录的意义

首先必须要明白,授权和登录实际上是两个操作。

1.1 授权(已废弃)

那授权的作用是啥呢?从小程序官方文档中我们可以看到授权操作只需通过wx.authorize() 接口便可以完成,以下是文档中对授权操作的描述:

提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。

也就是说,授权过程实际上只是在小程序前端获得了操作部分wx 接口的访问许可,这个过程实际上是不会与开发者服务器发生任何关系的。那这些访问许可包含哪些内容呢?再来看微信官方提供的scope 列表:


注:新版api已废弃wx.authorize(),具体信息查看https://developers.weixin.qq.com/miniprogram/dev/api/open.html

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.1 wx.getUserInfo

首先来看一下wx.getUserInfo 这个api:


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


也就是说,session_key 的作用之一是将小程序前端从微信服务器获取到的encryptedData 解密出来,获取到openId 和unionId 等信息。但是在1.2 登录过程中我们可以看到开发者服务器是能够直接拿到用户的openId 信息的,而且unionId 也是有其他获取途径的,所以session_key 在这里的作用看起来有点鸡肋。

2.2 getPhoneNumber

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: 微信小程序 获取session_key和openid

Ref: 微信UnionID作用

Ref: 小程序官方文档

以上所述是小编给大家介绍的小程序:授权、登录、session_key、unionId的详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 快速上手uni-simple-router

    快速上手uni-simple-router

    这篇文章主要介绍了uni-simple-router,本文通过实例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • js定时器的使用(实例讲解)

    js定时器的使用(实例讲解)

    本篇文章主要介绍了js中定时器的使用方法。需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • JS实现的简洁二级导航菜单雏形效果

    JS实现的简洁二级导航菜单雏形效果

    这篇文章主要介绍了JS实现的简洁二级导航菜单雏形效果,通过简单的JavaScript响应鼠标事件遍历页面元素实现二级导航菜单切换的效果,非常简单实用,需要的朋友可以参考下
    2015-10-10
  • 详解JavaScript 中 if / if...else...替换方式

    详解JavaScript 中 if / if...else...替换方式

    这篇文章主要介绍了JavaScript 中 if / if...else...替换方式 ,非常不错,这篇文章是小编给大家做的一个方法汇总,感兴趣的朋友一起看看吧
    2018-07-07
  • 微信小程序通过点击事件传参(data-)的操作示例

    微信小程序通过点击事件传参(data-)的操作示例

    微信小程序可以通过直接写 data-index="1" 进行数据的绑定 ,利用 bindtap 点击事件执行函数从而获取到参数信息,本文给大家介绍微信小程序通过点击事件传参(data-)的操作,感兴趣的朋友一起看看吧
    2023-12-12
  • 用javascript模仿ie的自动完成类似自动完成功的表单

    用javascript模仿ie的自动完成类似自动完成功的表单

    最近在写一个javascript框架,看见网上有不少自动完成功能的表单,于是用javascript写了一个,需要的朋友可以参考下
    2012-12-12
  • Java/JS获取flash高宽的具体方法

    Java/JS获取flash高宽的具体方法

    本文为大家详细介绍下使用Java/JS如何获取flash的高宽,下面有个不错的示例,感兴趣的朋友可以参考下,希望对大家有所帮助
    2013-12-12
  • 微信小程序实现固定表头、列表格组件

    微信小程序实现固定表头、列表格组件

    这篇文章主要介绍了微信小程序实现固定表头、列表格组件的相关资料,这个功能在我们进行小程序开发的时候非常实用,文章通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-07-07
  • 不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象

    不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象

    JavaScript中的对象模型(object model)并不广为人知,我们再设想:假设JavaScript没有构造函数或者没有new关键字会怎样?事情又会变成什么样的呢?让我们推到以前的重来,感兴趣的朋友可以详细了解下
    2013-01-01
  • 解决layer图标icon不加载的问题

    解决layer图标icon不加载的问题

    今天小编就为大家分享一篇解决layer图标icon不加载的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09

最新评论