小程序官方提供了一份登录流程时序图
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
刚开发使用时有一些困惑,仔细研究分析了一下,思考总结如下:
普通网站会员注册机制为
用户id由服务提供方生成,用户通过用户名/密码登录,确认身份。
小程序通过微信接口服务登录,主要省却了注册用户身份这一步,其他的还是我们自己的服务来实现。总结起来,小程序中有两个登录态
- 用户在业务服务的登录态
- 用户调用wx.login获得的用户登录态(我理解为用户在该小程序体系内在微信上登录的状态)
业务后台通过code2Session获取到openid,即相当于注册时生成的用户useId。openid没有必要也不应该返回给小程序前端页面,与web网站一样,返回一个自己生成的sessionid给小程序前端页面即可。后续用户在业务的登录态是否失效,就靠自己维护(不要受到wx.checkSession迷惑)
小程序不支持cookie,用storage维护登录态,可以自行考虑是否实现过期机制。storage中存在登录态的情况,可以直接去调用业务服务,不需要调用wx.checkSession判断 ‘用户调用wx.login获得的用户登录态’ 。
需要判断 ‘用户调用wx.login获得的用户登录态’ 的功能,不完全列举如下 - wx.getUserInfo获取用户的敏感信息,获取敏感信息,要求用户此前有调用过 wx.login 且登录态尚未过期;
- wx.getWeRunData获取用户过去三十天微信运动步数,需要先调用 wx.login 接口。
另外,微信内切换登录用户,不用担心新用户用到旧用户的登录态,storage 以用户维度隔离,同一台设备上,A 用户无法读取到 B 用户的数据。
https://developers.weixin.qq.com/miniprogram/dev/framework/ability/storage.html