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.
Disediakan kepada
onAuthStateChanged()
的回调> 通过User
对象。它没有role
hartanah.Ini bermakna baris berikut tidak melakukan apa-apa:
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.