gpt4 book ai didi

javascript - onAuthStateChanged 更改 Firebase 3.0.0 后引用不会重新运行

转载 作者:行者123 更新时间:2023-11-27 22:58:22 28 4
gpt4 key购买 nike

以下代码在 users/ 路径上附加一个观察程序,并在值更改时记录用户。

在 firebase 上,此 users/ 树根据当前经过身份验证的用户的访问权限进行控制。

firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
... do other stuff
} else {
// No user is signed in.
... do other stuff
}
});

firebase.database().ref('users').on('value', function(snapshot) {
// log the users
console.log(snapshot.val())
});

问题是使用具有正确权限的用户登录后,users/ 树不会被记录,如上面的回调所示。

除了将 users/ 观察者移动到 onAuthStateChanged 的回调中之外,是否还有其他解决方案。闻起来有内存泄漏的味道。

最佳答案

当您将监听器附加到节点时,Firebase 数据库会立即评估当前连接是否有权从该节点读取数据。如果没有,它将取消监听器。

由于您在未经身份验证的情况下开始,监听器将立即取消。如果您还将错误回调传递给 on(),您可以轻松看到这一点:

firebase.database().ref('users').on('value', function(snapshot) {
console.log(snapshot.val())
}, function(error) {
console.error(error);
});

要解决此问题,您需要在用户经过身份验证后附加监听器:

firebase.auth().onAuthStateChanged(function(user) {
if (user) {
firebase.database().ref('users').on('value', function(snapshot) {
console.log(snapshot.val())
}, function(error) {
console.error(error);
});
} else {
// No user is signed in.
... do other stuff
}
});

关于javascript - onAuthStateChanged 更改 Firebase 3.0.0 后引用不会重新运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37370462/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com