Heim > Fragen und Antworten > Hauptteil
Benutzer authentifizieren sich auf der Clientseite mit Firebase SDK.
Auf der Serverseite gibt es NodeJS und das SDK ist ebenfalls installiert. Dieser Servercode funktioniert, weil ich die Datenbank verwenden kann:
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);
Dieser Code funktioniert.
Dies ist eine (Fastify-)Route, über die ich Benutzerinformationen erhalten möchte:
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", }); });
Benutzervariablen sind immer leer.
Wie geht man mit diesem Problem richtig um?
Wie gehe ich allgemeiner mit dieser Situation um?
P粉3602660952023-09-09 13:15:25
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”是服务器上的实例)。
P粉1419112442023-09-09 12:18:05
为了验证用户服务器端,您需要生成 JWT 客户端,然后在服务器上验证它。 首先,在客户端生成 IdToken p>
接下来,将请求中的令牌发送到服务器。您可以为此使用承载身份验证(作为 HTTP 标头发送。授权:承载)
在服务器上,您可以使用任何 JWT 库来验证令牌。 如果您想使用 Firebase SDK,则必须使用正确的 SDK。 “firebase/compat/auth”适用于客户端。您需要 Firebase 管理 SDK, 以下链接介绍了如何使用 Firebase 管理员验证 ID 令牌SDK