Firebase 停止监听 onAuthStateChanged

22 浏览
0 Comments

Firebase 停止监听 onAuthStateChanged

从版本^3.0.0开始,我很难移除身份验证状态更改监听器。\n根据文档要求启动监听器:\n

firebase.auth().onAuthStateChanged(function (user) {
    // 处理代码
});

\n然而,我在文档中找不到任何有关移除身份验证状态更改监听器的说明。Firebase.Auth 类中有一个奇怪的函数叫做`removeAuthTokenListener`,但很不幸它没有被记录在文档中(Firebase文档参考链接)。\n通过浏览器的网页控制台:\n

var auth = firebase.auth();
auth.removeAuthTokenListener;

\n会打印一个接受一个参数的函数定义。我尝试了以下操作:\n

this.authListener = firebase.auth().onAuthStateChanged(function (user) {...});
firebase.auth().removeAuthTokenListener(this.authListener);

\n但是那没有起任何作用。

0
0 Comments

问题出现的原因是React组件在获取用户数据时需要取消订阅,否则每个组件都会出现内存泄漏。解决方法是在组件被卸载时取消订阅。

这里给出了一个使用React的useEffect钩子的示例代码,其中包含了取消订阅的逻辑。代码中使用了一个异步函数getUser来获取用户数据,并通过await关键字等待订阅函数的返回结果,将返回的取消订阅函数赋值给unsubscribe变量。然后在组件被卸载时返回unsubscribe函数,以实现取消订阅的操作。

另外,代码中还给出了另一种尝试的方法,但是并没有成功。作者表示这种方法并没有起作用,但是上述的解决方法对他很有帮助。他提到,由于unsubscribe已经是一个函数,所以只需要将其作为返回值即可进行清理,即"return unsubscribe;"。这种方法比返回一个调用函数的函数更加简洁。

使用useEffect钩子来取消订阅是解决Firebase中onAuthStateChanged函数监听问题的一种常见做法。

0
0 Comments

根据文档,onAuthStateChanged()函数返回一个用于取消订阅观察者的函数。因此,我们可以通过调用返回的函数来取消订阅,如下所示:

var unsubscribe = firebase.auth().onAuthStateChanged(function (user) {

// 处理代码

});

然后,我们可以通过调用unsubscribe()函数来取消订阅。

有点不好意思...不确定我是怎么忽略了这一点。谢谢。

实际上,我并不知道它是如何工作的,但是对我们的文档有了更多的经验。;-)

如果这是一个愚蠢的问题,对不起,但是为什么一个应用程序会需要取消订阅这个观察者呢?

例如,当用户有意注销并且您不希望再执行监听器时。

firebase v9的文档显示它的工作方式是相同的。

0