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

s4n0splo  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(135)

我有以下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数组中,为什么会这样呢?

8zzbczxx

8zzbczxx1#

您的安全规则设置为允许读取conversations集合中的文档,其中已验证用户的UID存在于userIds数组中,而您的查询尝试返回同一集合中的文档,其中id字段的值等于someId值。由于规则设置为允许您执行的操作以外的操作,Firebase服务器拒绝该操作,因此失败。
要创建满足您的规则的查询,必须使用array-contains运算符:

firestore
    .collection('conversations')
    .where('userIds', 'array-contains, uid)
    .onSnapshot(callback)

其中uid是经过身份验证的用户的UID。

相关问题