【问题标题】:firebase.auth().currentUser returning nullfirebase.auth().currentUser 返回 null
【发布时间】:2020-08-22 13:23:10
【问题描述】:

在登录页面的 html 文件中,我使用 Firebase 执行身份验证,并在身份验证成功后,将给定用户重定向到主页。当我在 express 文件中调用 firebase.auth().currentUser(用于渲染和路由页面)时,我得到 undefined 或当前用户的 null。

谁能帮我理解可能是什么问题?

这是我执行身份验证的方式:

firebase
                .auth()
                .signInWithEmailAndPassword(temail, tpass)
                .then(function(firebaseUser) {
                    window.location.href = "http://localhost:5000/homepage";
                })
                .catch(function(error) {
                    window.alert("incorrect pass");
                });

这是我的快递文件中的代码:

app.get("/homepage", (req, res) => {
    var user = firebase.auth().currentUser;
    console.log("USER IS " + user);
    res.render("menu", { title: "Welcome" });
});

【问题讨论】:

    标签: node.js firebase express firebase-authentication


    【解决方案1】:

    后端代码没有“当前用户”的感觉。当您在前端登录时,当前用户仅在该客户端上是已知的。后端不知道。如果您希望后端知道哪个用户已登录,则客户端必须向后端发送一个 ID 令牌以供其验证。 Firebase Admin SDK 的文档用于后端。客户端必须在请求中将 ID 令牌发送到您的路由,并且处理该路由的代码必须 verify the token 才能知道发出请求的用户。来自文档:

    如果您的 Firebase 客户端应用与自定义后端服务器通信,您可能需要识别该服务器上当前登录的用户。要安全地执行此操作,请在成功登录后,使用 HTTPS 将用户的 ID 令牌发送到您的服务器。然后,在服务器上,验证 ID 令牌的完整性和真实性并从中检索 uid。您可以使用这种方式传输的 uid 来安全地识别您服务器上当前登录的用户。

    【讨论】:

      【解决方案2】:

      当用户登陆新页面时,Firebase 会自动恢复他们之前的身份验证状态。但要这样做,它可能必须联系服务器,这意味着它可能需要一些时间。在 Firebase 恢复状态时,auth().currentUser 将为空。

      为确保您获得正确的身份验证状态,您应该使用身份验证状态侦听器,如getting the current user 上的文档中所示:

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

      【讨论】:

      • 我将 express 文件中的代码更改为这个,而不是 var user = firebase.auth().currentUser。现在,即使在成功登录后,用户仍为 NULL,并且始终处于 else 条件。
      • 每个身份验证状态都会调用onAuthStateChanged,所以最初也使用null。一旦它恢复了用户会话,它将再次与用户一起触发。您需要在代码中捕捉到这一事实。
      • @FrankvanPuffelen - 无论是否为空,如何检查用户会话的恢复是否完成?在不想订阅任何状态更改的情况下(一次性用例)。我读过这个github.com/firebase/firebase-js-sdk/issues/462,我真的很失望,因为它已经 3 岁了。
      猜你喜欢
      • 2018-12-06
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 2017-11-26
      • 2017-12-06
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      相关资源
      最近更新 更多