我有以下Firestore侦听器:
firestore
.collection('conversations')
.where('id', '==', 'someId')
.onSnapshot(callback)
为集合设置了以下规则:
match /conversations/{document} {
allow read: if (request.auth.uid in resource.data.userIds) == true;
allow write: if (request.auth.uid in resource.data.userIds) == true
当我在useEffect()中插入这个侦听器时,我收到错误:@firebase/firestore: Firestore (9.15.0): Uncaught Error in snapshot listener: FirebaseError: [code=permission-denied]: Missing or insufficient permissions.
既然我肯定登录了,而且登录用户的userId也在conversation的userIds数组中,为什么会这样呢?
1条答案
按热度按时间8zzbczxx1#
您的安全规则设置为允许读取
conversations
集合中的文档,其中已验证用户的UID存在于userIds
数组中,而您的查询尝试返回同一集合中的文档,其中id
字段的值等于someId
值。由于规则设置为允许您执行的操作以外的操作,Firebase服务器拒绝该操作,因此失败。要创建满足您的规则的查询,必须使用
array-contains
运算符:其中
uid
是经过身份验证的用户的UID。