onSnapshot中的Firebase未捕获错误:[FirebaseError:缺少权限或权限不足。]

时间:2020-07-15 12:31:52

标签: javascript firebase react-native google-cloud-firestore firebase-security

我的应用程序(onSnapshot)上有一个Firestore侦听器,当我创建它时,出现错误“ onSnapshot中的未捕获错误:[FirebaseError:缺少权限或不足。]”

useEffect(() => {
    const { firebase } = props;

    // Realtime database listene
    const unsuscribe = firebase
      .getDatabase()
      .collection("posts")
      .doc(firebase.getCurrentUser().uid)
      .collection("userPosts")
      .onSnapshot((snapshot) => {
        let changes = snapshot.docChanges();
        changes.forEach((change) => {
          if (change.type === "added") {
            console.log(change.doc.data());
            // TODO - Add the new post to the posts list
          }
        });
      });

    return () => {
      // Detach the listening agent
      unsuscribe();
    };
  }, []);

我一直在检查我的权限,但这似乎很好:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    function isSignedIn() {
      return request.auth.uid != null;
    }
    
    function isSameUser(userId) {
        return request.auth.uid == userId;
    }
   
    match /posts/{userId}/userPosts {
       allow read: if true;
       allow write, update, delete: if isSignedIn() && isSameUser(userId);
    }
  }
}

如您所见,代表用户帖子的文档(在/ posts / {userId} / userPosts中)只有在用户已登录并且是同一用户的情况下才会创建。这里错了吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

好的,我有解决方法。我在这里写它,因为它将来可能对某人有用。

只需:

match /posts/{userId}/userPosts/{document=**} {
   allow read: if true;
   allow write, update, delete: if isSignedIn() && isSameUser(userId);
}

并且可以正常工作。