我正在使用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后端登录了用户?
谢谢。
答案 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
});