Firebase 身份验证 - 登录用户为空

时间:2020-12-29 05:33:32

标签: javascript firebase firebase-authentication

我设法使用 Firebase 设置了自定义登录系统。用户输入电子邮件/密码并重定向到主页(这是私有的)。登录后我遇到 onAuthStateChanged 问题。当我登录主页面后检查身份验证状态时,我得到无效用户(空)。 firebase 仪表板显示我已成功登录,但 onAuthStateChanged 正好相反。

我正在尝试检查用户是否登录到我的 html 页面,如果没有,我想将它们重定向到登录页面。我喜欢身份验证在 firebase 中的工作方式,但我需要保护我的 html 页面而不是我的 div(这是绝大多数 firebase 身份验证教程显示的内容)。

如果有人有更简单的密码保护网络目录的方法,它看起来比 HTaccess 更好,请提供建议(我并不热衷于使用 wordpress 进行密码保护,但它是一个选项)。否则,我想我将不得不在 PHP 中执行此操作。提前致谢!

(function () {
   firebase.auth().onAuthStateChanged(function(user) {
      if (user) {
        // User is signed in.
         console.log(user);
         console.log('A user is logged in.');
      } else {
        // No user is signed in.
        console.log('Invalid user. Redirecting to root.');
        window.location.replace('../index.html');
      }
   });
})();

1 个答案:

答案 0 :(得分:0)

如果您导航到一个新页面,Firebase 将不得不再次初始化。作为其中的一部分,它将尝试恢复用户的身份验证状态,但这需要调用服务器,这需要时间。

出于这个原因,onAuthStateChanged 侦听器最初将 null 作为当前用户触发(并且 auth.currentUser 设置为 null)。然后,一旦用户登录,侦听器将再次使用该用户的 user 对象触发。

如果你想检测这个初始状态,你可以在浏览器的本地存储中存储一些令牌值,你可以在新页面上自己检查,或者你可以设置一个超时时间,当你希望用户重新登录,然后才导航到 index.html 页面。