扫描小程序码分享
目前在做登录这一块儿,按照文档上wx.login中的范例,是在onLaunch中做了登录。但是实际程序执行中,发现onLoad比onLaunch更快得到响应。
我知道这个因为异步导致的,这个问题会导致在onLoad中如果有请求服务端api的时候,由于未登录,请求可能会失败。
那么,为了避免这个情况,是不是应该放弃在onLaunch中进行登录,转而在每个页面的onLoad中判断判断小程序前端的登录状态,如果发现未登录,则执行登录过程?
4 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
当然是放在onLaunch里,毕竟本质上是共用的业务,至于如何在页面里使用,看下这个文章,https://developers.weixin.qq.com/community/develop/article/doc/00002ac57208f0e7335d111f156013
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
可以参考下这篇文章https://developers.weixin.qq.com/community/develop/article/doc/00086219508c28eebf2ce485d56c13
放在哪儿无所谓,只要解决好异步请求依赖的问题就行了。
我自己的一套方案是:
1,将http请求封装为一个类,用Promise对wx.request做封装。
2,将用户相关的封装一个类,登录相关的方法放在这个类里面。
3,设置全局状态管理store,在store里,设一个module为user,用户登录后,user里设isLogin状态为true。
4,在所有请求发出之前,先检查一下store.user.isLogin的值。如未登录,则先登录,成功后再发出api请求。
判断用户是否登录的依据有两种。
第一种:只要用户授权,获取到用户昵称、头像等简单信息,即为登录,也就是视觉登录。
第二种:调用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,这个没有标准,根据自己的实际情况走。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
当然是放在onLaunch里,毕竟本质上是共用的业务,至于如何在页面里使用,看下这个文章,https://developers.weixin.qq.com/community/develop/article/doc/00002ac57208f0e7335d111f156013
可以参考下这篇文章https://developers.weixin.qq.com/community/develop/article/doc/00086219508c28eebf2ce485d56c13
放在哪儿无所谓,只要解决好异步请求依赖的问题就行了。
我自己的一套方案是:
1,将http请求封装为一个类,用Promise对wx.request做封装。
2,将用户相关的封装一个类,登录相关的方法放在这个类里面。
3,设置全局状态管理store,在store里,设一个module为user,用户登录后,user里设isLogin状态为true。
4,在所有请求发出之前,先检查一下store.user.isLogin的值。如未登录,则先登录,成功后再发出api请求。
判断用户是否登录的依据有两种。
第一种:只要用户授权,获取到用户昵称、头像等简单信息,即为登录,也就是视觉登录。
第二种:调用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,这个没有标准,根据自己的实际情况走。