收藏
回答

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

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


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


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

回答关注问题邀请回答
收藏

2 个回答

  • 莫名
    莫名
    04-26

    放在哪儿无所谓,只要解决好异步请求依赖的问题就行了。

    我自己的一套方案是:

    1,将http请求封装为一个类,用Promise对wx.request做封装。

    2,将用户相关的封装一个类,登录相关的方法放在这个类里面。

    3,设置全局状态管理store,在store里,设一个module为user,用户登录后,user里设isLogin状态为true。

    4,在所有请求发出之前,先检查一下store.user.isLogin的值。如未登录,则先登录,成功后再发出api请求。

    04-26
    有用
    回复
  • 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
    有用
    回复
登录 后发表内容