【问题标题】:Avoid create extra childs Firebase避免创建额外的孩子 Firebase
【发布时间】:2016-12-21 00:53:02
【问题描述】:

我是 firebase 的新手,我想知道如何找出有关 hasChildren() RuleDataSnapshot 的问题以及如何创建验证数据。

数据库样本:

 {
  "visitors" : {

   "-KP4BiB4c-7BwHwdsfuK" : {
      "mail" : "aaa@mail.com",
      "name" : "aaa",
    }
    .....
}

规则:

{
    "rules": {
        "visitors": {
            ".read": "auth != null",
            ".write": "auth.uid != null",
                "$unique-id": {
                    ".read": "auth != null ",
                    ".write": "auth != null",
                    ".validate": "newData.hasChildren(['name','mail'])",
            }
        }

    }
}

据我所知,如果我想创建数据,数据字段必须具有相同的名称才能通过规则验证。 例如 : 如果我更改每个“名称”的“名称”并且我尝试使用他们的孩子创建一个新节点,则该规则适用于我所能理解的。 我想知道 ¿ 如果我手动添加要创建的新字段会发生什么?

例如:

//Add extra fields which are not actually present
 var data = {name : "xxx",mail:"xxx@mail.com",extra1:222,extra:333};
 firebase.database().ref('visitors/').push(data);

结果是:

  "visitors" : {
  "-KP4BiB4c-7BwHwdsfuK" : {
      "mail" : "aaa@mail.com",
      "name" : "juan",
     "extra1":222,
      "extra2":333
    }
}

所以我的问题是如何避免为每个节点创建额外的子节点?我想规则做到了。

提前致谢。

【问题讨论】:

    标签: validation firebase rules


    【解决方案1】:

    您的验证规则规定您的帖子必须有至少这些孩子,而不是只有这些孩子。 为确保不能添加其他孩子,您必须在规则中添加以下内容:

    {
      "rules": {
        "visitors": {
            ".read": "auth != null",
            ".write": "auth.uid != null",
            "$unique-id": {
                ".read": "auth != null ",
                ".write": "auth != null",
                //This line says the new data must have ATLEAST these children
                ".validate": "newData.hasChildren(['name','mail'])",   
                //You can add individual validation for name and mail here     
                "name": { ".validate": true },
                "mail": { ".validate": true },
                //This rule prevents validation of data with more child than defined in the 2 lines above (or more if you specify more children)
                "$other": { ".validate": false }
            }
        }
      }
    }
    

    看看here 的另一个例子。

    【讨论】:

      猜你喜欢
      • 2012-05-31
      • 2020-09-09
      • 2016-12-24
      • 2019-05-01
      • 1970-01-01
      • 2020-04-13
      • 2020-02-10
      • 2012-01-26
      • 1970-01-01
      相关资源
      最近更新 更多