Ralat Cangkuk Reaksi Firebase: Tidak dapat membaca sifat undefined (membaca '_repo')
P粉436688931
P粉436688931 2024-03-20 12:15:03
0
1
424

Saya sedang menulis cangkuk untuk mendapatkan userole daripada pangkalan data langsung dalam js seterusnya dan saya mendapat ralat "Tidak boleh membaca sifat yang tidak ditentukan (baca '_repo')". Beginilah rupa cangkuk saya

import { useEffect, useState } from "react";
import { useRouter } from "next/router";
import { onAuthStateChanged } from "firebase/auth";
import { auth, db } from "../firebase";

const useAuth = () => {
  const [currentUser, setCurrentUser] = useState(null);
  const [role, setRole] = useState(null);
  const router = useRouter();

  useEffect(() => {
    const unsubscribe = onAuthStateChanged(auth, (user) => {
      if (user) {
        setCurrentUser(user);
        state
      

        
        let nodeRef;
        if (user.role === "user") {
          nodeRef = ref(db, `users/${user.uid}/role`);
        } else if (user.role === "trainer") {
          nodeRef = ref(db, `trainers/${user.uid}/role`);
        } else if (user.role === "admin") {
          nodeRef = ref(db, `admins/${user.uid}/role`);
        } else if (user.role === "nutritionist") {
          nodeRef = ref(db, `nutritionists/${user.uid}/role`);
        }

        onValue(nodeRef, (snapshot) => {
          const userRole = snapshot.val();
          setRole(userRole);
        });
      } else {
        setCurrentUser(null);
        setRole(null);
        // Redirect to login page if user is not logged in
        router.push("/login");
      }
    });

    
    return () => unsubscribe();
  }, []);

  return { currentUser, role };
};

export default useAuth;

Beginilah rupa konfigurasi firebase saya

// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";
import { getAuth } from "firebase/auth";
import { getDatabase } from "firebase/database";
import { getStorage } from "firebase/storage";

const firebaseConfig = {
  
};

// Initialize Firebase
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
const db = getDatabase(app);
const storage = getStorage(app);

export { auth, db, storage };

Ini adalah struktur pangkalan data saya

- users
  - <user_id>
    - displayName: "User's display name"
    - email: "User's email address"
    - role: "user"
    - ...
- trainers
  - <trainer_id>
    - displayName: "Trainer's display name"
    - email: "Trainer's email address"
    - role: "trainer"
    - ...
- admins
  - <admin_id>
    - displayName: "Admin's display name"
    - email: "Admin's email address"
    - role: "admin"
    - ...
- nutritionists
  - <nutritionist_id>
    - displayName: "Nutritionist's display name"
    - email: "Nutritionist's email address"
    - role: "nutritionist"
    - ...

Saya telah mencuba ini kerana jelas saya melakukan sesuatu yang salah dengan pangkalan data, tetapi saya telah mencuba membaca dokumentasi dan masih menghadapi masalah. Saya baru dalam firebase.

P粉436688931
P粉436688931

membalas semua(1)
P粉207969787

Disediakan kepada onAuthStateChanged()的回调> 通过 User 对象。它没有 role hartanah.

Ini bermakna baris berikut tidak melakukan apa-apa:

let nodeRef;
if (user.role === "user") {
  nodeRef = ref(db, `users/${user.uid}/role`);
} else if (user.role === "trainer") {
  nodeRef = ref(db, `trainers/${user.uid}/role`);
} else if (user.role === "admin") {
  nodeRef = ref(db, `admins/${user.uid}/role`);
} else if (user.role === "nutritionist") {
  nodeRef = ref(db, `nutritionists/${user.uid}/role`);
}

Selepas melaksanakan kod di atas, nodeRef 将变为 undefined,然后您将其输入到 onValue ia membuang ralat yang anda lihat. p>

Jika peranan pengguna telah ditambahkan sebagai tuntutan tersuai kepada token pengesahan pengguna, anda perlu mendapatkan token ID pengguna dan kemudian mendapatkan tuntutan yang diperlukan.

user.getIdTokenResult()
  .then(idToken => {
    const tokenRole = idToken.claims.role;
    // trust it?
    setRole(tokenRole);
  })
  .catch(err => {
    // TODO: Handle token handling errors
  });
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan