Nodejs + firebase: Bagaimana untuk menyemak sama ada pengguna adalah bahagian pelayan disahkan
P粉493313067
P粉493313067 2023-09-08 14:13:39
0
2
571

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?

  • Adakah terdapat fungsi Firebase yang saya tidak ketahui yang boleh mendapatkan semula maklumat pengguna semasa?
  • Perlukah saya menyampaikan sesuatu kepada permintaan? Jika ya, apakah kandungan yang disampaikan?

Bagaimana untuk menangani situasi ini secara lebih umum?

P粉493313067
P粉493313067

membalas semua(2)
P粉360266095

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

P粉141911244

Untuk mengesahkan bahagian pelayan pengguna, anda perlu menjana klien JWT dan kemudian mengesahkannya pada pelayan. Mula-mula, jana IdToken p> 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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan