【问题标题】:Firebase 9.4.1 and Javscript Authentication function "onAuthStateChanged" works slowlyFirebase 9.4.1 和 Javascript 身份验证功能“onAuthStateChanged”工作缓慢
【发布时间】:2021-11-15 13:43:19
【问题描述】:

我正在学习 Firebase,我正在使用最新版本的 9.4.1 用于 Web 和 Javascript 和 Jquery。我有以下代码检查用户当前是否已登录,如果是,则不允许他访问登录页面。同样,如果用户已登录,那么我也会隐藏“注册”和“登录”按钮并显示“退出”按钮。然而,在我的实验中,我发现这些动作执行得非常缓慢。这意味着如果我尝试访问登录页面,则页面加载将近半秒,在半秒内显示页面的所有内容(登录表单和内容),然后决定重定向回索引页。甚至“注册”和“登录”按钮在被隐藏之前也会显示相似的时间,“退出”按钮也需要一段时间才能显示出来。为什么会有这些延迟?有什么办法可以消除这些延迟并立即执行操作?

认证校验码

onAuthStateChanged(auth, (user) => {
  if(user){
    const uid = user.uid;
    (window.location.pathname.split("/").pop() == 'login.php')?location.replace("index.php"):null;
    $(".logout").show();
    $(".login").hide();
    $(".register").hide();
  }
});

【问题讨论】:

    标签: javascript jquery firebase firebase-authentication


    【解决方案1】:

    当页面加载时,Firebase 会尝试从其在本地存储中的信息恢复用户的身份验证状态。这要求它调用服务器以检查凭据,以及诸如帐户是否被禁用之类的事情。此调用需要一些时间,只有在调用完成后才会调用您的 onAuthStateChanged 并返回结果。

    这意味着您看到的短闪是很正常的,仅靠 Firebase API 是无法避免的。您可以做的一个技巧是自己在本地存储中存储一个小的令牌值,然后在页面加载时读取该值以确定用户是否可能通过身份验证。 Michael Bleigh 在他的 Google I/O 演讲中解释了这项技术Architecting Mobile Web Apps

    虽然您不能在所有情况下都阻止闪现,但您可以使用它来有效地阻止大多数用户的闪现。

    【讨论】:

    • 我想这总结了它。接受答案,因为您的解释似乎合乎逻辑。另一方面,我的问题仍然存在。让我们看看您提供的链接是否有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 2019-10-20
    • 1970-01-01
    • 2020-03-15
    • 2017-06-16
    • 2020-05-17
    相关资源
    最近更新 更多