小程序php后台检查登录状态,微信小程序,监听用户登录事件

本文介绍了在微信小程序中如何实现全局监听用户登录状态,通过自定义事件总线和封装Page函数,确保用户在任意页面登录后,其他页面能及时获取到登录状态变化,避免了白屏和页面状态不一致的问题。
摘要由CSDN通过智能技术生成

1. 动机

最近在开发小程序,小程序既需兼顾针对新用户的内容预览,又要为注册用户提供服务,简单梳理下,基本需求如下:

小程序共三个tab页,所有用户都可以浏览首页内容,了解我们可以提供的优质服务;

进入其他两个页面之后,如果用户没有登录,那就显示登录按钮,如果登录了,则显示服务内容;

用户在一个页面登陆之后,全局生效。

就这么个看起来很简单的需求,也经过了如下迭代:

将登录状态和凭据存储在 App.globalData.authorize 中,每个需要授权的页面 onload 生命周期检查 App.globalData.authorize.authorized ,为 true 时渲染服务内容,为 false 则显示登录按钮;

但如果打开了需要授权的页面 A 但是没有登录,再打开页面 B 登录,这时候回到 A 页面,登录按钮赫然在眼,这是因为 A 页面的 onload 回调函数只执行了一次;

为了能在 A 页面及时共享 B 页面登录后的状态,在 A 页面的 onshow 生命周期里再获取了一次登录状态,但这样一来,打开 A 页面的时候,会出现短暂的白屏,用户甚至有可能看到按钮变成服务内容的整个过程。

翻遍小程序 API 文档 ,也没有发现用于监听登录的生命周期,就算有也用不了,因为我们有着自己的账号体系,服务端认证完毕才算真正的登录成功。

所以我决定自己包装原有的 Page 函数,添加一个 onauth 生命周期——

2. 事件总线

首先是自定义登录事件的触发与监听,官方的 EventChannel 需要向后兼容,横竖是个订阅回调,那我还不如自己撸一个得了:

/**

* @file utils/event.js

*/

/**

* @const EMPTY_HANDLER

* @desc 空事件回调,被取消事件将被指向此函数

*/

const EMPTY_HANDLER = () => {};

/**

* @const eventSet - 事件监听函数集

*/

const eventSet = {

autho

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值