Firestore模拟器中UPDATE/GET请求无resource对象的问题排查
Firestore安全规则中resource对象随机未定义的问题解析
- 这个现象是Firebase CLI模拟器的预读取优化逻辑导致的,仅存在于模拟器环境,生产环境不会出现。
- 模拟器为了提升规则校验效率,会先尝试不加载resource对象执行规则校验:如果规则不依赖resource,就能直接通过;如果规则依赖resource(比如你写的
resource.data.id != null),这次校验会因resource未定义失败,随后模拟器会自动拉取目标文档的resource数据,重新执行一次规则校验——这就是单个请求在模拟器Requests面板里出现一次失败、一次成功记录的原因。 - 你看到的
(Error: unknown) (undefined)错误,是第一次校验时未加载resource导致的预期中间结果,并非规则写法有问题。 - 生产环境中,Firestore会直接判断规则是否依赖resource,按需加载文档数据,不会触发两次校验的逻辑,你的规则在生产环境可以正常运行。
- 目前Firebase官方文档没有明确说明模拟器的这个预校验逻辑,相关细节仅在社区公开问题讨论中存在。
内容的提问来源于stack exchange,提问作者Codesmith
相关产品推荐
相关产品推荐

