Firebase实时数据库:如何创建限制子对象大小的规则
Firebase Realtime Database 复杂数据类型的大小限制方案
你当前的规则仅对字符串类型数据生效,当写入对象、数组这类复杂类型时,newData.val().length会返回undefined,直接导致验证失败。要解决这个问题,需要区分数据类型,分别处理不同类型的大小校验逻辑:
修改后的规则如下:
{ "rules": { /* * 仅允许读取特定用户数据 * 仅允许用户写入自身键下的公开信息JSON或null */ "$user": { ".read": "true", ".write": "auth.uid === $user", ".validate": "newData.val() == null || (newData.isString() && newData.val().length <= 123456) || (!newData.isString() && JSON.stringify(newData.val()).length <= 123456)" } } }
规则逻辑说明:
newData.val() == null:保留原规则中允许写入null的逻辑newData.isString() && newData.val().length <= 123456:针对字符串类型数据,直接校验字符长度!newData.isString() && JSON.stringify(newData.val()).length <= 123456:针对对象、数组等非字符串类型,将数据序列化为JSON字符串后校验整体长度,确保序列化后的实际数据大小不超过限制
这样无论写入的是简单字符串还是复杂结构数据,都能准确限制数据的实际大小,避免恶意用户插入大量数据。
内容的提问来源于stack exchange,提问作者Dr-Bracket
相关产品推荐
相关产品推荐

