Firebase .validate错误

时间:2018-01-01 20:54:24

标签: json firebase-realtime-database firebase-security

我的Firebase数据库组织如下。

Organization of my database

正如您所看到的,它是一个字典数组(每个字典包含两个条目,' text'和#39; tag')。

它包含以下规则。我想要做的是确保newData包含一个名为' text'的字符串。和一个名为' tag'。

的字符串
{
   "rules": {
     ".read": "auth != null",

     ".write": "!data.exists() || !newData.exists()",

       //Can write only Array with text and tag
     ".validate": "newData.hasChildren(['text', 'tag'])",
     "$other": {
        ".validate": false
     },
     "text": {
       ".validate": "newData.isString()"
     },
     "tag": {
       ".validate": "newData.isString()"
     }
   }
 }

当我给它提供以下JSON时,它说'模拟的写作被拒绝'在第10行(".validate": "newData.hasChildren(['text', 'tag'])",)。

JSON文件:

 {
    "3": {
        "text": "text message",
        "tag": "this is a tag"
    }
}

我该怎么写我的规则? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您将验证规则定义为过高一级。现在,您验证整个数据库是否包含子tagtext,但它并没有。相反,您想验证根目录下的每个子节点是否都有这些子节点,这要求您定义$变量规则,如下所示:

{
   "rules": {
     ".read": "auth != null",
     "$childid": {
       ".write": "!data.exists() || !newData.exists()",

       //Can write only Array with text and tag
       ".validate": "newData.hasChildren(['text', 'tag'])",
       "$other": {
        ".validate": false
       },
       "text": {
         ".validate": "newData.isString()"
       },
       "tag": {
         ".validate": "newData.isString()"
       }
     }
   }
 }