React Native 快照侦听器中出现未捕获的错误:,FirebaseError:[代码=许可被拒绝]:权限缺失或不足

kpbwa7wx  于 2022-12-19  发布在  React
关注(0)|答案(1)|浏览(125)

我试图让用户只读写他们自己的数据。我的规则如下(来自文档)

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read, update, delete: if request.auth != null && request.auth.uid == userId;
      allow create: if request.auth != null;
    }
  }
}

我的用户的uid与我的文档id匹配,但我仍然收到错误:
快照侦听器中未捕获的错误:
Firebase错误:[代码=许可被拒绝]:缺少权限或权限不足。
获取uid到文档id的代码

const handleSignUp = async () => {
      auth
      .createUserWithEmailAndPassword(email, password)
      .then(async (UserCredentials) => {
        const user = UserCredentials.user;
        console.log("Registered with: ", user.email);

        try {
          const uidRef = doc(db, 'users', user.uid);

          const docRef = await setDoc(uidRef, {
            name: name,
            age: age,
            currentWeight: currentWeight,
            goalWeight: goalWeight,
          });

        } catch (e) {
          console.error("Error adding document: ", e);
        }

我真的很困惑,因为我已经尝试了许多不同的方法,这里的所有文档/答案都不适合我。我猜错误是在我在此代码中调用snapshot时出现的

const getUser = async() => {

    const subscriber = onSnapshot(usersRef, (snapshot) => {
      let user = []
        snapshot.docs.forEach((doc) => {
          user.push({...doc.data(), key: doc.id })
        })
        setUser(user);
        console.log(user);
    })
    return () => subscriber();
  };

我只是不确定这里到底错在哪里。是我的规则吗?我的快照吗?

p8h8hvxi

p8h8hvxi1#

假设您得到的是QuerySnapshot结果,我怀疑您的代码正在阅读整个users集合,但正如文档所述,规则不是过滤器,而只是确保您的代码只尝试访问允许访问的数据。
因此,您的代码应该只尝试读取当前登录用户的文档。

const getUser = async() => {
  if (getAuth().currentUser) {
    const uidRef = doc(db, 'users', getAuth().currentUser.uid);

    const subscriber = onSnapshot(uidRef, (doc) => {
      setUser({...doc.data(), key: doc.id })
    })

    ...
  }
};

相关问题