Nodejs + firebase:如何檢查使用者是否經過伺服器端身份驗證
P粉493313067
P粉493313067 2023-09-08 14:13:39
0
2
550

使用者使用 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",
 });
});

使用者變數始終為空。

如何處理這個問題的正確方法?

  • 有沒有我不知道的 Firebase 函數可以檢索目前使用者資訊?
  • 我應該向請求傳遞一些內容嗎?如果是的話,傳遞什麼內容?

更一般地如何處理這種情況?

P粉493313067
P粉493313067

全部回覆(2)
P粉360266095

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粉141911244

為了驗證使用者伺服器端,您需要產生 JWT 用戶端,然後在伺服器上驗證它。 首先,在客戶端產生 IdToken p>

接下來,將請求中的令牌傳送到伺服器。您可以為此使用承載身份驗證(作為 HTTP 標頭發送。授權:承載)

在伺服器上,您可以使用任何 JWT 庫來驗證令牌。 如果您想使用 Firebase SDK,則必須使用正確的 SDK。 “firebase/compat/auth”適用於客戶端。您需要 Firebase 管理 SDK, 以下連結介紹如何使用 Firebase 管理員驗證 ID 令牌SDK

#
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板