Nodejs + Firebase: So überprüfen Sie, ob der Benutzer serverseitig authentifiziert ist
P粉493313067
P粉493313067 2023-09-08 14:13:39
0
2
478

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?

  • Gibt es eine mir unbekannte Firebase-Funktion, die die aktuellen Benutzerinformationen abrufen kann?
  • Soll ich der Anfrage etwas weitergeben? Wenn ja, welche Inhalte werden vermittelt?

Wie gehe ich allgemeiner mit dieser Situation um?

P粉493313067
P粉493313067

Antworte allen (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 客户端,然后在服务器上验证它。 首先,在客户端生成IdTokenp>

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

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

      Neueste Downloads
      Mehr>
      Web-Effekte
      Quellcode der Website
      Website-Materialien
      Frontend-Vorlage
      Über uns Haftungsausschluss Sitemap
      Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!