首页 > 解决方案 > Firebase 身份验证 - 登录用户为空

问题描述

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

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

如果有人有更简单的方法来密码保护看起来比 HTaccess 更好的 web 目录,请建议(我并不热衷于使用 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');
      }
   });
})();

标签: javascriptfirebasefirebase-authentication

解决方案


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

因此,onAuthStateChanged侦听器最初将以null当前用户身份触发(并auth.currentUser设置为null)。然后,一旦用户登录,侦听器就会再次触发user该用户的对象。

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


推荐阅读