cari

Rumah  >  Soal Jawab  >  teks badan

Nodejs + firebase: Bagaimana untuk menyemak sama ada pengguna adalah bahagian pelayan disahkan

Pengguna mengesahkan di sisi pelanggan menggunakan firebase sdk.

Di bahagian pelayan, terdapat nodejs dan sdk juga dipasang. Kod pelayan ini berfungsi kerana saya boleh menggunakan pangkalan data:

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

Kod ini berfungsi.

Ini adalah laluan (fastify) di mana saya ingin mendapatkan maklumat pengguna:

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

Pembolehubah pengguna sentiasa kosong.

Apakah cara yang betul untuk menangani masalah ini?

Bagaimana untuk menangani situasi ini secara lebih umum?

P粉493313067P粉493313067477 hari yang lalu582

membalas semua(2)saya akan balas

  • P粉360266095

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

    aannabeengineer betul. Ini adalah bukti konsep (kod sisi pelayan mesti dilaraskan selepas pengesahan pengguna dan mendapatkan maklumat).

    Pelayan:

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

    Halaman hadapan:

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

    Ya, saya kini menggunakan pentadbir firebase di bahagian pelayan ("firebase" ialah tika pada pelayan).

    balas
    0
  • P粉141911244

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

    Untuk mengesahkan bahagian pelayan pengguna, anda perlu menjana klien JWT dan kemudian mengesahkannya pada pelayan. Mula-mula, jana IdToken di sisi pelanggan

    Seterusnya, hantar token dalam permintaan ke pelayan. Anda boleh menggunakan Pengesahan Pembawa untuk ini (dihantar sebagai pengepala HTTP. Keizinan: Pembawa)

    Pada pelayan, anda boleh menggunakan mana-mana perpustakaan JWT untuk mengesahkan token. Jika anda ingin menggunakan SDK Firebase, anda mesti menggunakan SDK yang betul. "firebase/compat/auth" adalah untuk pelanggan. Anda memerlukan SDK Pengurusan Firebase, Pautan berikut menerangkan cara menggunakan SDK Token ID Pengesahan Pentadbir Firebase

    balas
    0
  • Batalbalas