以下代码在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
观察者之外,还有其他解决方案。那种内存泄漏的气味。
答案 0 :(得分:1)
将监听器附加到节点时,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
}
});