如何在Firebase实时数据库无认证时按值设置带推送键子节点写入规则
Firebase实时数据库规则修正方案
你需要给child-node下每个自动生成的推送键对应的子节点,基于其值设置写入验证规则。当前你的规则设置有误,导致写入测试失败,问题出在:
- 验证规则写在了
child-node节点层级,这里的newData指向的是整个child-node的对象(包含所有推送键子节点),而非单个推送键对应的值,所以newData.val().contains('3')无法正确验证单个值。 .validate里的!newData.hasChild('child-node')逻辑无意义,当前节点就是child-node,不会存在同名子节点。
正确的规则需要用**通配符$pushId**匹配每个自动生成的推送键,在子层级设置验证逻辑:
{ "rules": { "child-node": { ".read": true, ".write": true, "$pushId": { ".validate": "newData.isString() && newData.val().includes('3')" } } } }
规则说明:
$pushId作为通配符,会匹配child-node下所有自动生成的推送键(比如-MySP3ncK324234pz_XZ)。.validate规则确保:- 新写入的数据是字符串类型(
newData.isString()); - 字符串值中包含字符
'3'(Firebase规则中使用includes而非contains)。
- 新写入的数据是字符串类型(
设置后,只有当推送键对应的子节点值包含'3'时,写入操作才会被允许,完全符合你的需求。
内容的提问来源于stack exchange,提问作者undroid
相关产品推荐
相关产品推荐

