收藏
回答

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

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


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


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

最后一次编辑于  2018-03-20  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏关注问题回答

1 个回答

  • Yang
    Yang
    2018-03-20

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

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

    第二种:调用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,这个没有标准,根据自己的实际情况走。



    2018-03-20
    赞同
    回复