Firestore规则数值字段与字符串路径变量校验失败问题咨询
Firestore规则:数值类型字段与路径变量匹配失效的问题
这是Firestore规则里很容易踩的类型匹配坑,我来给你详细拆解:
失效的规则示例
假设你有类似这样的规则:
match /users/{user_id} { allow read: if resource.data.user_id == user_id; }
这个规则会始终失效——哪怕你文档里的user_id数值和路径里的user_id看起来完全一致。
核心原因
问题出在类型不匹配上:
- 你的文档中
user_id字段是数值类型(比如整数456) - 但Firestore的路径变量
{user_id}会被自动解析为字符串类型(比如"456")
当不同类型的值做相等比较时,Firestore规则会直接判定为不匹配,导致规则失效。
两种验证方法
你可以通过以下两种方式确认这个问题:
方法一:硬编码数值测试
修改规则,把比较的右侧换成硬编码的整数值,比如:match /users/{user_id} { allow read: if resource.data.user_id == 456; }如果你的文档中
user_id确实是数值456,此时读取操作就能成功。这说明数值字段本身能正常匹配,问题出在路径变量的类型上。方法二:修改字段类型测试
把文档里的user_id字段类型改成字符串类型(比如把数值456改成字符串"456"),保持原规则不变,此时读取操作就能正常生效——这直接验证了类型不匹配是规则失效的根源。
内容的提问来源于stack exchange,提问作者AsifM
相关产品推荐
相关产品推荐

