尝试从 Firestore 数据库检索不起作用

问题描述 投票:0回答:1

我本质上尝试使用查询从用户登录时具有匹配 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 react-native google-cloud-firestore
1个回答
0
投票

我刚刚在 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);
      })

很确定我在发布这个问题之前尝试过,但没有成功?自从它终于实现以来,没有任何抱怨。

© www.soinside.com 2019 - 2024. All rights reserved.