用户使用 firebase sdk 在客户端进行身份验证。
在服务器端,有nodejs,也安装了sdk。该服务器代码是有效的,因为我可以使用数据库:
var firebase = require("firebase/compat/app");
require("firebase/compat/database");
require("firebase/compat/auth");
const firebaseConfig = {
apiKey: "Axxx4",
authDomain: "movtxxxom",
projectId: "moxxx2",
storageBucket: "movxxom",
messagingSenderId: "14xx9",
appId: "1:1xxxea13c",
measurementId: "GxxFL",
databaseURL: "httpxxx/",
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
此代码有效。
这是一个(fastify)路线,我想在其中获取用户信息:
fastify.get("/login-success", async (request, reply) => {
// Return View
const user = firebase.auth().currentUser;
console.log(user);
return reply.view("/templates/login-success.ejs", {
text: "Log in success",
});
});
用户变量始终为空。
如何处理这个问题的正确方法?
更一般地如何处理这种情况?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
aannabeengineer 是对的。这是一个概念证明(在用户身份验证和检索信息后必须对服务器端代码进行调整)。
服务器:
fastify.post("/authcheck", async (request, reply) => { try { const idToken = request.body.idToken; console.log(idToken); const decodedToken = await firebase.auth().verifyIdToken(idToken); const uid = decodedToken.uid; // Get user data from Firebase const user = await firebase.auth().getUser(uid); console.log(user.displayName); return user; // DO SOMETHING ELSE } catch (error) { console.error("Error verifying ID token:", error); reply.code(401).send({ error: "Unauthorized access" }); } });前端:
async function sendTokenToServer() { try { const idToken = await firebase .auth() .currentUser.getIdToken(/* forceRefresh */ true); // Send token to your backend via HTTPS const response = await fetch("/authcheck", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ idToken }), }); if (!response.ok) { throw new Error("Network response was not ok"); } const data = await response.json(); // Handle server response here console.log("User ID:", data.userId); } catch (error) { // Handle error console.error("Error:", error); } } sendTokenToServer();是的,我现在在服务器端使用 firebase admin(“firebase”是服务器上的实例)。
为了验证用户服务器端,您需要生成 JWT 客户端,然后在服务器上验证它。 首先,在客户端生成 IdToken p>
接下来,将请求中的令牌发送到服务器。您可以为此使用承载身份验证(作为 HTTP 标头发送。授权:承载)
在服务器上,您可以使用任何 JWT 库来验证令牌。 如果您想使用 Firebase SDK,则必须使用正确的 SDK。 “firebase/compat/auth”适用于客户端。您需要 Firebase 管理 SDK, 以下链接介绍了如何使用 Firebase 管理员验证 ID 令牌SDK