firebase.auth().currentUser 在nodejs后端返回null

问题描述 投票:0回答:2

在登录页面的 html 文件中,我使用 Firebase 执行身份验证,并在身份验证成功后将给定用户重定向到主页。当我在用于渲染和路由页面的 Express 文件中调用

firebase.auth().currentUser
时,我得到当前用户的未定义或
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
2个回答
4
投票

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

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


1
投票

当用户登陆新页面时,Firebase 会自动恢复之前的身份验证状态。但要做到这一点,它可能必须联系服务器,这意味着可能需要一些时间。当 Firebase 恢复状态时,

auth().currentUser
将为 null。

为了确保获得正确的身份验证状态,您应该使用身份验证状态侦听器,如有关获取当前用户的文档中所示:

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
  } else {
    // No user is signed in.
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.