recherche

Maison  >  Questions et réponses  >  le corps du texte

Nodejs + Firebase : Comment vérifier si l'utilisateur est authentifié côté serveur

Les utilisateurs s'authentifient côté client à l'aide du SDK Firebase.

Côté serveur, il y a nodejs et le sdk est également installé. Ce code serveur fonctionne car je peux utiliser la base de données :

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);

Ce code fonctionne.

Il s'agit d'un itinéraire (rapide) où je souhaite obtenir des informations sur l'utilisateur :

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

Les variables utilisateur sont toujours vides.

Quelle est la bonne façon de gérer ce problème ?

Comment gérer cette situation de manière plus générale ?

P粉493313067P粉493313067441 Il y a quelques jours553

répondre à tous(2)je répondrai

  • P粉360266095

    P粉3602660952023-09-09 13:15:25

    aannabeengineer a raison. Il s'agit d'une preuve de concept (le code côté serveur doit être ajusté après l'authentification de l'utilisateur et la récupération des informations).

    Serveur :

    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" });
      }
    });

    Front-end :

    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();

    Oui, j'utilise maintenant Firebase admin côté serveur ("firebase" est l'instance sur le serveur).

    répondre
    0
  • P粉141911244

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

    Afin d'authentifier les utilisateurs côté serveur, vous devez générer le client JWT puis le valider sur le serveur. Tout d'abord, générez IdToken côté client

    Ensuite, envoyez le jeton dans la requête au serveur. Vous pouvez utiliser l'authentification du porteur pour cela (envoyée sous forme d'en-tête HTTP. Autorisation : porteur)

    Sur le serveur, vous pouvez utiliser n'importe quelle bibliothèque JWT pour valider le jeton. Si vous souhaitez utiliser le SDK Firebase, vous devez utiliser le SDK correct. "firebase/compat/auth" est destiné aux clients. Vous avez besoin du SDK de gestion Firebase, Le lien suivant explique comment utiliser le SDK du jeton d'identification de validation d'administrateur Firebase

    répondre
    0
  • Annulerrépondre