Firebase从node.js后端检测用户登录

时间:2019-04-09 20:26:24

标签: node.js firebase firebase-authentication

我正在使用node.js作为Web应用程序的后端。在服务器中,我有

  res.sendFile(path.join(__dirname, "../public/html/main/profile.html"));
});

但是我只想发送文件(如果用户已登录)。我试图弄清楚如何使用Node.js中的Firebase进行检测。我尝试通过在Node.js中初始化应用程序

var firebase = require("firebase");
var config = {
  apiKey: "<API_KEY>",
  authDomain: "<PROJECT_ID>.firebaseapp.com",
  databaseURL: "https://<DATABASE_NAME>.firebaseio.com",
  storageBucket: "<BUCKET>.appspot.com",
};
firebase.initializeApp(config);

firebase.auth().onAuthStateChanged(function(user) {
    if (user) {}
})

但是,即使我有一个用户在前端登录,从后端看来,“ user”变量也是错误的。如何检测是否从node.js后端登录了用户?

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以为用户创建会话,并在提供文件之前检查请求用户的会话是否处于活动状态。 Express具有一个方便的用户会话模块,您可以在服务器端存储该会话(可能在您的情况下存储在Firebase中):https://github.com/expressjs/session 看起来可能如下所示:

if (req.session) {
  // could also have a check for session being valid depending on implementation
  res.sendFile(path.join(__dirname, "../public/html/main/profile.html"));
}

如果要使用cookie存储客户端的会话,可以参考以下内容:https://expressjs.com/en/resources/middleware/cookie-session.html

答案 1 :(得分:0)

您必须将ID令牌传递到服务器。在客户端上,您将获得ID令牌。

firebase.auth().currentUser.getIdToken()
  .then(function(idToken) {
    // You need to send the ID token to your server.
  })
  .catch(function(error) {
    // Error occurred.
  });

在后端,您将其传递并使用Firebase Admin SDK verify the ID token

// idToken comes from the client app
admin.auth().verifyIdToken(idToken)
  .then(function(decodedToken) {
    var uid = decodedToken.uid;
    // ...
    // You can return the file now.
  }).catch(function(error) {
    // Handle error
  });