使用者使用 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", }); });
使用者變數始終為空。
如何處理這個問題的正確方法?
更一般地如何處理這種情況?
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
#