Firestore数据校验规则不生效,无法拦截年龄小于18的用户创建请求
问题原因
- Firestore安全规则的评估逻辑为:只要任意一条匹配当前请求路径的规则返回允许,请求就会直接放行,不会叠加其他同路径匹配规则的限制。你配置的第一条是匹配所有路径的通配符规则
match /{document=**},只要请求时间早于2021年9月22日就允许所有读写,自然会覆盖后面针对users集合的年龄校验规则。 - 次要注意点:你当前写的判断条件是
request.resource.data.age > 18,如果需求是禁止小于18岁的用户,等于18岁的用户也会被拦截,建议改成>= 18。 - 额外排查项:确认你修改规则后已经在Firebase控制台点击了「发布」按钮,未发布的规则不会生效。
修复方案
调整规则的排列顺序,把更具体的集合规则放在通配符规则前面,或者直接删除不需要的全局通配规则即可,示例如下:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{user} { allow create: if request.resource.data.age >= 18; } // 全局通配规则放在所有具体规则之后 match /{document=**} { allow read, write: if request.time < timestamp.date(2021, 9, 22); } } }
内容的提问来源于stack exchange,提问作者user10952798
相关产品推荐
相关产品推荐

