窗口加载和Firebase身份验证

时间:2020-07-06 21:57:47

标签: javascript firebase firebase-authentication google-authentication

我正在创建一个依赖Firebase身份验证并使用Google Auth的网站。 用户登录到单独的页面后,我的网站将用户重定向到“主页”,根据登录的用户在该页面中加载窗口。

但是,如果我在“ window.onload”中检查是否存在登录用户,则始终为false。 相反,如果我运行异步函数,然后在“ .then”之后检查登录用户,则返回true。

这使我假设“ window.onload”的启动速度比页面可以识别登录用户的速度快。

在调用异步函数之前,如何解决此问题并确保已登录的用户加载? 我很确定firebase.auth()本身是异步的,但是由于某种原因。然后似乎无法使用它。

<script>

  window.onload = loadPage();
  
  function loadPage()
  {
    var user = firebase.auth().currentUser;
    if(user)
      console.log("userFound before async"); //Does NOT console log

    asyncFunction().then(function()
    {
      var user = firebase.auth().currentUser;
      if(user)
        console.log("userFound after async"); //Does console log
    })
}

</script>

1 个答案:

答案 0 :(得分:0)

如果要对当前登录的用户执行某项操作,则应使用auth state observer注册一个回调,该回调在首次知道该用户对象时被调用。正如您在问题中所描述的,该页面最初加载时将不可用。

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

不建议依赖其他异步功能的完成-使用观察者来确定。每当确定用户是否已登录时都会调用它,并且每次登录状态发生更改时都会再次调用它。