suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Nodejs + Firebase: So überprüfen Sie, ob der Benutzer serverseitig authentifiziert ist

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粉493313067P粉493313067511 Tage vor597

Antworte allen(2)Ich werde antworten

  • P粉360266095

    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”是服务器上的实例)。

    Antwort
    0
  • P粉141911244

    P粉1419112442023-09-09 12:18:05

    为了验证用户服务器端,您需要生成 JWT 客户端,然后在服务器上验证它。 首先,在客户端生成 IdToken

    接下来,将请求中的令牌发送到服务器。您可以为此使用承载身份验证(作为 HTTP 标头发送。授权:承载)

    在服务器上,您可以使用任何 JWT 库来验证令牌。 如果您想使用 Firebase SDK,则必须使用正确的 SDK。 “firebase/compat/auth”适用于客户端。您需要 Firebase 管理 SDK, 以下链接介绍了如何使用 Firebase 管理员验证 ID 令牌SDK

    Antwort
    0
  • StornierenAntwort