【问题标题】:Prevent Empty Database Path using Firebase Rules使用 Firebase 规则防止空数据库路径
【发布时间】:2019-08-30 22:45:13
【问题描述】:

有什么办法可以阻止数据库插入带有空(null)字符串的值。

例如。

/path/to/certainString/value

如上述路径,不知何故 if certainString = "" 然后数据库存储值而没有适当的孩子

-Root
--Key1
---value1  
---value2
---value3
   ...

所以如果 Key 是空的,那么它会插入类似下面的值

-Root
--value1  
--value2
--value3

--Key1
---value1  
---value2
---value3
   ...

无论如何我可以使用数据库安全规则

在所有路径上防止这种情况

【问题讨论】:

    标签: firebase-realtime-database firebase-security


    【解决方案1】:

    null 值和 Firebase 实时数据库中的空字符串之间存在很大区别。 Firebase 可以存储一个空字符串,但它不能存储一个null 值。尝试将null 存储在路径中会有效地从数据库中删除该路径。由于 Firebase 对这两种情况的处理方式不同,因此您也需要在规则中分别处理它们。

    您可以使用此规则阻止用户存储空字符串:

    ".validate": "data.isString() && data.val().length > 0"
    

    另请参阅RuleDataSnapshot.length property 上的文档。

    为了防止用户写null,需要防止用户删除路径处的数据。虽然这是可能的,但您不能使用验证规则来执行此操作,因为这些不是由删除操作触发的。所以为了防止数据删除/空值,我们使用写规则:

    ".write": "newData.exists()"
    

    另请参阅RuleDataSnapshot.exists() method 上的文档。

    【讨论】:

    • 感谢您的回复,敬请期待。
    • "data.isString() && data.val().length > 0" 是否仅适用于路径?因为数据库中可能有空值,我也需要存储一些空值。
    • 它适用于您定义规则的路径,就像所有规则一样。您通常会在树中尽可能低地实施您的规则,以避免过于宽泛的规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2018-06-22
    • 2017-02-05
    • 1970-01-01
    • 2017-07-15
    • 2021-08-13
    相关资源
    最近更新 更多