小程序前端实现登录的逻辑写在onLaunch还是onLoad?

发布于 8 年前作者 ayi4239 次浏览最后编辑 8 年前来自 ask

目前在做登录这一块儿,按照文档上wx.login中的范例,是在onLaunch中做了登录。但是实际程序执行中,发现onLoad比onLaunch更快得到响应。

我知道这个因为异步导致的,这个问题会导致在onLoad中如果有请求服务端api的时候,由于未登录,请求可能会失败。

那么,为了避免这个情况,是不是应该放弃在onLaunch中进行登录,转而在每个页面的onLoad中判断判断小程序前端的登录状态,如果发现未登录,则执行登录过程?

1 回复
myi
myi1 楼6 年前

判断用户是否登录的依据有两种。

第一种:只要用户授权,获取到用户昵称、头像等简单信息,即为登录,也就是视觉登录。

第二种:调用wx.login获取code,然后调用腾讯api获取用户的openid等信息,即为登录,也就是体系登录。

所以一般使用体系登录的方式来实现微信小程序的登录功能。

做体系登录就必须要用wx.login,这里要注意wx.login仅在需要的时候调用一次即可,而不是每请求一次后台api就调用一次wx.login,这是不对的,而且wx.login高频调用会导致微信号暂时被封,大概一两个小时左右。

按照小程序官方对登录授权的解释和方案,大致总结就是:

让用户体验到的仅仅是视觉登录,而且是程序确实需要他登录时再登录,但在开发者实现功能时进行体系登录。

对于请求api的前提必须已经进行了体系登录的做法,也就是请求api时要带上openid,可以参考以下步骤:

1、wx.login后,将获取到的openid等信息保存到服务器的缓存数据库,并设置有效期。

    仅返回自行维护的session标识到前端。


2、前端收到session标识后存在手机缓存中


3、每次请求api时都必须带上session标识


4、后台用前端来的session标识去缓存数据库里取openid

    这一步就是进行登录校验,一是校验session标识的合法性,二是校验是否能取到openid。

    如果取到,带着openid去进行数据读写。

    如果取不到,要么是session标识不正确,要么是缓存过期被清理了。

    将校验结果返回到前端


5、前端根据后台返回结果进行处理,如果返回登录过期,那么就从步骤1开始,重新来一遍登录流程


所以,最好对wx.request、wx.login等api进行封装。

最后至于wx.login是放在onLoad还是onLaunch,这个没有标准,根据自己的实际情况走。