验证Firebase中的$ Location

时间:2014-03-31 14:04:20

标签: validation firebase firebase-security

我正在尝试对传入数据进行一些验证到我的firebase应用程序中。我的结构在底部。为清楚起见,我已删除了现有的验证规则 - 但我们可以假设在rules级别允许读取和写入。

$categoryid看起来像这样:

1234: {1:{...}, 2:{...}, 3:{...}}

我想确保$categoryid(上例中的1234)是数字 - 但规则".validate": "$categoryid.isNumeric()"会导致“没有此类方法或属性”错误。

我可以在data.child($categoryid)中检查categories,但该级别的变量不存在,并导致“未知变量”错误。

我确定我在这里错过了一个技巧......

{
  "rules": {   
    "categories": {
      "$categoryid": {
        "$itemid": {
          "members": {
            "$id": {

            }
          }
        }
      }
    }
  }
}

2 个答案:

答案 0 :(得分:2)

目前没有良好的方法可以做到这一点,但有一个hacky工作涉及将$categoryId存储在一个字段中,然后检查该字段是否为数字。

使用这些安全规则:

{
  "rules": {   
    "categories": {
      "$categoryid": {
        ".validate": "'' + newData.child('meta/id') === $categoryId && newData.child('meta/id').isNumber()"
        "meta": {},
        "items": {
          "$itemid": {
            "members": {
              "$id": {

              }
            }
          }
        }
      }
    }
  }
}

然后我们可以通过运行:

来创建一个新类别
categoriesRef.child(1234).set({meta: {id: 1234}});

这些规则会检查a)$categoryId匹配$categoryId/meta/id$categoryId/meta/id是否为数字。

答案 1 :(得分:0)

要进行此验证,您可以使用RegEx /^[0-9]+$/

{
   "rules": {   
    "categories": {
     "$categoryid": {
        .validate": "$categoryid.matches(/^[0-9]+$/)"
       "$itemid": {
         "members": {
           "$id": {

           }
         }
      }
     }
  }
 }
}