小程序开发(I)如何在小程序中建立用户系统

小程序开发


浏览:914 次

出身背景

当我们想要构建一个具有登录功能的小程序时,我们面临的第一个问题是如何建立一个基于小程序的用户系统。

构建基于微信的用户系统的核心思想是获得微信用户的唯一身份,然后使用唯一身份来关联或创建用户系统。

唯一ID

在微信生态系统中,微信用户主要有两个唯一标识符:OpenId和UnionId。

OpenId是用户对小程序/公众号的标识,开发人员可以通过它来标识用户。

UnionId是同一主题微信小程序/公众号/APP的用户身份。开发者需要在微信开放平台上绑定同一账号的主体。开发者可以通过UnionId实现多个小程序、公众号甚至APP之间的数据交换。

在不改变主题的情况下,用户的两个ID是永久的。即使用户删除了小程序,下次他进来时,仍然可以使用这两个ID进行识别。

注意:更改正文是指将小程序绑定到其他程序。如果主体发生更改,则用户的unionid将发生更改。

获得唯一身份的方法和过程

为了便于描述这个过程,我们直接阅读了微信推荐的登录最佳实践。登录过程序列图如下:

小程序登录过程序列图

获取OpenId

OpenId是用户对小程序/官方帐户的标识。即使小程序更改了绑定体,OpenId也不会更改。

获取OpenId主要经过以下步骤:

小程序通过Wx Login()获取代码

通过请求将代码传递到后端

后端通过appid、appsecret和代码向微信接口服务发送请求,以获取openid和session_key。

通过这种方式,您可以获得用户的OpenId。然而,实际上,服务器仅获取OpenId是不够的。特别是,当小程序想要与其他小程序或公众号和APP交互或链接时(例如,使用小程序),我们需要使用UnionId作为app之间的桥梁。

因此,当多个app需要通信时,OpenId不能用作唯一标识符,因为OpenId仅用于单个app。建议使用UnionId作为用户的唯一ID,该ID在多个app中是恒定且唯一的。

获取UnionId

有两种方法可以获得UnionId:

以静默方式获取UnionId(无需获取UnionId方法)。使用code方法获取UnionId(仅适用于特定场景)

分析加密数据以获得UnionId(UnionId方法必须可用)。通过小程序中的getUserInfo获取加密数据后,代码和加密数据将传递到后端。后端通过code_Key获得会话,然后使用session_Key解密加密数据并获得UnionId。

方法1:静默获取UnionId

无声获取unionId的方法是在获取openId的方法中添加一个字段,该字段返回unionId。具体流程如下图所示

在代码模式下获取UnionId

静默获取UnionId的条件:

1.微信开放平台下有同一主题的app、公众号和小程序。

2.用户已关注同一主题的某个公众号,或已在同一主题app或公众号上进行微信登录授权。

也就是说,如果用户没有关注同一主题的公众号,也没有授权微信登录系统主题APP和公众号,则无法获得UnionId

方法2:解析加密数据以获得UnionId

采集步骤:

致电wx。登录以获取代码

调用wx GetUserInfo获取加密数据rawdata

服务器根据code_key获取会话,通过session_key解密数据rawdata并获取UnionId

实践中的登录过程

方法1:

创建用户后,可以通过代码获取UnionId,步骤如下:

致电wx。登录以获取代码

服务器根据代码获取OpenId和UnionId

如果存在UnionId,则根据UnionId查询用户是否存在。如果存在,则返回登录状态;否则,将向小程序报告异常

小程序根据异常执行“模式2”

方法2:

调用wx登录获取代码

调用wx GetUserInfo获取加密数据rawdata和userinfo

客户端将代码、原始数据和用户信息发送到服务器

服务器根据code_Key、OpenId、UnionId获取会话

如果UnionId存在,请转至步骤(7)

如果UnionId不存在,则根据session_Key,服务器解密原始数据以获得UnionId

根据UnionId检查用户是否存在。如果是,请返回登录状态。另外