我本质上尝试使用查询从用户登录时具有匹配 uid 的数据库中检索数据。这是用户集合的 json 格式以及您对数据的期望:
email: "", first: "", last: "", role: "Regular User" or "Admin User", uid: which is the uid generated when creating a new user so they're tied.
我正在尝试使用此代码,在登录期间它还会检索角色数据,以便我可以将其用于将来的参考,但我只输出未定义。
signInWithEmailAndPassword(auth, email, password)
.then(userCred => {
setErrorMessage(null);
const user = userCred.user;
console.log(user.uid);
//User Role check
const userRef = collection(db, 'users');
const q = query(userRef, where("uid", "==", user.uid));
onSnapshot(q, (snapshot) => {
let users = [];
snapshot.docs.forEach((doc) => {
users.push({ ...doc.data(), id: doc.id})
})
console.log(users);
})
以防万一人们需要上下文,这就是我在单独的配置文件中设置 firebase 的方式:
const app = initializeApp(firebaseConfig);
export const db = getFirestore(app);
export const auth = getAuth(app);
我刚刚在 firebase 文档中经过长期艰苦的战斗找到了解决方案......
我发现使用 getDocs 并传递查询也可以解决我的问题:
const q = query(userRef, where("uid", "==", user.uid));
getDocs(q)
.then((qSnapshot) => {
qSnapshot.forEach((doc) => {
console.log(doc.data().role)
})
})
.catch((error) => {
console.error('Error: ', error);
})
很确定我在发布这个问题之前尝试过,但没有成功?自从它终于实现以来,没有任何抱怨。