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

Posted

技术标签:

【中文标题】Firebase 身份验证 - 登录用户为空【英文标题】:Firebase Authentication - Logged In User Is Null 【发布时间】:2021-04-05 19:41:33 【问题描述】:

我已经设法使用 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');
      
   );
)();

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

超时听起来是个不错的尝试,我不知道加载时间会起到一个作用。谢谢你的洞察力,弗兰克! 设置时间延迟没有效果,一旦持续时间结束,onAuthStateChanged 触发并且用户为空。我需要确保用户在身份验证之前无法访问我的 html 文件。现在,一个快速的谷歌搜索会给一个后门哈哈。我不认为有办法让firebase与htaccess一起工作? PS> 我已经有主机了 我假设确保我的所有页面都受到保护并且只能通过密码访问的唯一方法是让 firebase 托管我的文件。我将使用 PHP 作为我的登录解决方案并废弃我的 firebase 应用程序。学习很有趣=D 1) 延迟应该在您决定离开之前。页面加载时立即附加监听器。 2)“我需要确保用户在身份验证之前无法访问我的 html 文件。”在 Firebase 托管上没有办法做到这一点。全世界的每个人都可以访问那里的任何文件。 嗨弗兰克。我想我解决了我的问题。我上传了我的网络原型,它正在工作!我猜当 FiB 检查登录时,它是在网络上检查,而不是在本地检查 =0 如果我尝试在没有 Firebase 身份验证的情况下访问我的 html 页面,用户将被踢到他们可以请求访问的根目录。是的,我知道我的文件仍然可以访问,但我正在努力防止我的内容被搜索引擎等索引。就目前而言,导航依赖于身份验证。我还有很长的路要走,但我对结果很满意!

以上是关于Firebase 身份验证 - 登录用户为空的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 身份验证用户为空

如何确定 Firebase 用户是不是使用 facebook 身份验证登录

如何确定 Firebase 用户是不是使用 facebook 身份验证登录

为啥我必须在用户登录后使用 firebase 对用户进行身份验证?

Flutter:Firebase身份验证无需登录即可创建用户

Redux firebase - 正确处理身份验证状态(前几毫秒状态为空,直到加载)