后台-系统设置-扩展变量-手机广告位-内容正文顶部 |
小程序登录架构
总体流程
一、打开小程序后,要生成一个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架构
一、小程序调用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,获取到则进行登录绑定,反之调用执行登录注册操作,不进行绑定。
3.如果从缓存中获取到unionId,需要根据uuid和unionId查询绑定信息,如果查询到记录则更新绑定信息,如果未查询到则新增绑定信息。
4.如果从数据库中获取到绑定信息则需要更新此账号绑定信息。
5.登录成功后跳转首页
解密api架构
一、入参
1、encrypted_data
2、code
3、uuid
4、iv
二、处理逻辑
根据解密算法文档对encrypted_data进行解密,得到unionid
按自动登录的逻辑处理unionid
三、返回值:
没有找到账号
{
"autologin":"fail",
"reson":"account_not_found"
}
自动登录成功:
正常登录的返回token一样的
Token失效更换令牌
一、入参
1、uuid
二、逻辑处理
通过前端入参uuid到数据库es_connect查询是否存在绑定关系,
存在,获取令牌返回商城token
不存在,返回如下
{
"login":"fail",
"reson":"account_not_found"
}
前端进行退出操作
小程序退出账号
小程序退出账号不进行账号解绑,清除商城toekn即可
效果
小程序退出登录后到首页,重新登录或者注册则绑定登录或者注册的新账号。
退出小程序后,再次进入小程序则进行自动登录,用户无感。
上述就是关于技术方面的内容了,想了解更多详情,可以持续关注易族智汇javashop,有任何问题,欢迎一起探讨。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。