我的应用程序(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中)只有在用户已登录并且是同一用户的情况下才会创建。这里错了吗?
谢谢。
答案 0 :(得分:1)
好的,我有解决方法。我在这里写它,因为它将来可能对某人有用。
只需:
match /posts/{userId}/userPosts/{document=**} {
allow read: if true;
allow write, update, delete: if isSignedIn() && isSameUser(userId);
}
并且可以正常工作。