如何确保使用Firebase匿名登录?

时间:2017-09-12 15:47:36

标签: firebase react-native firebase-authentication

我正在使用React Native应用程序,该应用程序使用Firebase Auth uid来识别单个用户实例。 我的初始实现在每次启动时调用signInAnonymously,并返回非持久性uid。

参考Anonymous user in Firebase,我的代码变成了这样。它按预期工作,但仍不清楚为什么这段代码是正确的。

static ensureLogin() {
  return new Promise((resolve, reject) => {
    firebase.auth().onAuthStateChanged((user) => {
      if (user) {
        resolve(user)
      } else {
        firebase.auth().signInAnonymously()
          .catch(function(error) {
            reject()
          })
      }
    })
}

1 个答案:

答案 0 :(得分:0)

要回答这个问题,请查看此官方文档中的详细信息。 https://firebase.google.com/docs/auth/web/manage-users

它有这个示例代码:

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

后面的评论行说"没有用户登录。"而不是"用户已退出。"。 这意味着它不仅由用户的登录/退出操作触发。

下面也说了。

  

通过使用观察者,您可以确保Auth对象不在   中间状态 - 例如初始化 - 当你获得当前状态时   用户。

这意味着2个事实。

  1. Auth对象具有内部状态
  2. onAuthStateChanged观察Auth对象的状态
  3. 因此,我们应该注意到onAuthStateChanged可以由Auth对象的任何状态更改触发,包括初始化!在init之后调用signInAnonymously并不奇怪。

    在调用else块中signInAnonymously后,它会在登录后重新触发onAuthStateChanged

    这就是代码正确的原因。