在onAuthStateChanged更改Firebase 3.0.0后,Refs不会重新运行

时间:2016-05-22 04:12:18

标签: javascript firebase firebase-realtime-database firebase-authentication

以下代码在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观察者之外,还有其他解决方案。那种内存泄漏的气味。

1 个答案:

答案 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
  }
});