Firestore报调用者无权限 仅文档创建者可读规则不生效如何解决
问题原因
Firestore安全规则不会对查询结果做过滤操作,它只会校验你的查询是否满足规则约束的前提,只要查询有可能返回不符合规则的文档,就会直接返回权限错误,不会执行查询。
你现在的规则要求用户只能读取uid等于自己登录uid的文档,但你写的Flutter查询语句里完全没有包含uid相关的筛选条件,Firestore无法确认你这个查询返回的结果全部都符合uid == 当前登录用户uid的约束,所以直接拒绝了请求。
修复方案
你只需要在现有的查询条件里额外加一个uid等于当前登录用户uid的筛选条件即可,修改后的查询示例:
_firestore .collection('subscriptions') .where('uid', isEqualTo: FirebaseAuth.instance.currentUser!.uid) // 新增的uid筛选条件,和规则匹配 .where('anotherId', isEqualTo: '1') .where('andAnotherId', isEqualTo: '2') .where('date', isGreaterThanOrEqualTo: dateInSeconds) .limit(1) .get() .then(....
修改后你的查询和规则约束完全匹配,Firestore就会放行请求,同时也能保证只会返回当前用户自己创建的订阅文档。
补充说明:如果你之前没有为这个查询创建复合索引,第一次执行时会报错,错误日志里会直接给出创建对应索引的跳转入口,在Firebase控制台完成索引创建后查询即可正常运行。
内容的提问来源于stack exchange,提问作者M4trix Dev
相关产品推荐
相关产品推荐

