Firebase Realtime Database更新null时.validate规则失效问题咨询
Firebase Realtime Database设置null时.validate规则失效的原因及解决办法
这是预期行为
当你调用set(null)时,Firebase Realtime Database会把这个操作视为删除目标节点,而非更新节点值为null。此时.validate规则默认不会阻止删除操作——因为.validate的作用是验证节点存在时的新值是否合法,而删除操作属于节点从存在变为不存在的场景,默认不受这条规则约束。
规则修改方案
如果要禁止删除data节点(也就是不允许设置null),需要在.validate规则中加入newData.exists()检查,确保节点必须保持存在状态:
"data": { ".read": "auth != null", ".write": "auth != null", ".validate": "newData.exists() && newData.val() != null" }
newData.exists()会判断操作后节点是否仍存在,当你尝试set(null)时,newData.exists()返回false,规则验证失败,操作会被拒绝。
官方文档相关说明
Firebase Realtime Database的规则系统中,明确将设置null等同于删除节点。.validate规则仅在节点被创建或更新(即操作后节点存在)时生效,删除操作需要通过newData.exists()这类条件来明确限制。
内容的提问来源于stack exchange,提问作者kaz
相关产品推荐
相关产品推荐

