跳到主要内容

小程序登录架构

总体流程

一、打开小程序后,要生成一个uuid,首先检测登录状态

此处属于小程序内部处理逻辑,通过判断access_token及refresh_token是否过期来完成。

具体请参考《基于Token机制鉴权架构

注:每个客户端都要存在一个唯一的uuid,也可以在打开小程序时处理

二、判断登录状态

如果已经登录,则不做处理

如果未登录,则尝试自动登录

三、自动登录

1、获取unionId

首先从缓存中获取unionid,如获取到则进行如下第3步骤。

未获取到再从数据库中通过uuid获取unionId。

2、如上步骤未获取到unionId,则需要从微信jscode2session接口获取unionId。

如返回unionId,则进行如下第3步骤。

如未返回unionId,则记录sessionKey,返回前端,前端调用wx.getUserInfo拿到加密数据,然后传递给解密api,解密api会解码出unionid并和uuid绑定。解密流程参照如下第4步骤。

3、如可以获取到unionId,则进行绑定状态的判定

如已绑定,则登录返回商城token信息,小程序记录token即可。

如未绑定,缓存中和数据库中要存储对应的授权信息即unionId,返回前端account_not_found,前端需要登录或者注册进行账号的绑定。

具体请参考如下《自动登录API架构》

4、将解密后的auth2token记录缓存

​ 校验数据库中是否存在账号绑定信息

存在:执行登录返回商城令牌token信息。

不存在:在数据库中将uuid和unionId进行绑定。

具体参考如下《解密API架构》

自动登录api架构

image-20181113204220379

一、小程序调用wx.login获取code

二、调用自动登录api

  1. 此时要传递code 参数,服务器端要请求微信api来获取session_key和UnionID,

  2. 此时如果微信返回了UnionID ,则要使用unionid做为绑定的凭证

  3. 在请求此api时,需要appid和appsecret,这两个参数要在服务器端配置(要做一个小程序自动登录配置选项)

  4. 还要传递uuid参数,当用unionid查找不到账户时,需要将此uuid做为Key将unionid存储在redis,并返回

  5. 在登录绑定时会用此uuid再取出unionid进行绑定

  6. 如果自动登录成功(找到相应账号)返回token,如果自动登录失败(没有找到相应账号)提示绑定失败

  7. 如果没有读到unionid则要明确返回值给前端

三、入参:

1、code

2、uuid

四、返回值

没有读到unionid:

{
"autologin":"fail",
"reson":"unionid_not_found"
}

读到了unionid,但没有找到账号

{
"autologin":"fail",
"reson":"account_not_found"
}

自动登录成功:

正常登录的返回token一样的

登录绑定流程

  1. 小程序发起登录绑定
  2. 调用登录绑定API,首先获取unionId

从缓存中获取,获取到则进行登录绑定。反之根据uuid从数据库获取unionId。

从数据库中获取,根据uuid从数据库进行获取unionId,获取到则进行登录绑定,反之调用执行登录注册操作,不进行绑定。

  1. 如果从缓存中获取到unionId,需要根据uuid和unionId查询绑定信息,如果查询到记录则更新绑定信息,如果未查询到则新增绑定信息。
  2. 如果从数据库中获取到绑定信息则需要更新此账号绑定信息。
  3. 登录成功后跳转首页

解密api架构

一、入参

1、encrypted_data

2、code

3、uuid

4、iv

二、处理逻辑

根据解密算法文档对encrypted_data进行解密,得到unionid

按自动登录的逻辑处理unionid

三、返回值:

没有找到账号

{
"autologin":"fail",
"reson":"account_not_found"
}

自动登录成功:

正常登录的返回token一样的

Token失效更换令牌

image-20200220142207726

一、入参

1、uuid

二、逻辑处理

通过前端入参uuid到数据库es_connect查询是否存在绑定关系,

存在,获取令牌返回商城token

不存在,返回如下

{
"login":"fail",
"reson":"account_not_found"
}

前端进行退出操作,

小程序退出账号

小程序退出账号不进行账号解绑,清除商城toekn即可

效果

小程序退出登录后到首页,重新登录或者注册则绑定登录或者注册的新账号。

退出小程序后,再次进入小程序则进行自动登录,用户无感。