验证Firebase密钥是一个整数

时间:2015-10-06 20:46:34

标签: firebase firebase-security

这是数据库架构:

enter image description here

以下是规则:

$("input[name=group]").change(function () {
if ($(this).val() == 'A' & 'B' && $(this).is(":checked")) {
    $("#combined").show();
} else {
    $("#combined").hide();
}
});

如何验证(使用“.validate”或“.write”规则)用户只能在整个树中输入整数?或者有一些解决方法吗?

我想要实现的是创建只写(没有删除或更新)的日志,该日志具有一些结构并将在稍后处理。我可以将结构更改为2015-10-6-17-30之类的密钥或其他内容。我简直不敢相信Firebase没有针对这种情况的东西。

更新: 这不重复,我正在寻找解决方法,或者其他能帮助我实现目标的东西。

2 个答案:

答案 0 :(得分:14)

验证密钥是否为数字:

{
  "$key": {
     ".validate": "$key.matches(/^[0-9]+$/)"
  }
}

但请阅读array-like behaviors in Firebase。提示:可能使用" y2015"," m12"等前缀来避免使用数字时出现意外结果。

答案 1 :(得分:2)

如果使用推送ID适用于您,可以使用以下安全规则结构。

{
    "notifications": {
        "$notification_id": {
            ".write": "!data.exists()",
            ".read": "false",
            ".validate": "newData.hasChildren(['time', 'state', 'message'])",
            "time": {
                ".validate": "newData.val().matches(/YOUR REGEX/)"
            },
            "state": {
                ".validate": ""
            },
            "message": {
                ".validate": ""
            }
        }
    }
}

显然你需要填补空白。这里最重要的是你可以使用正则表达式匹配时间字段。

实际数据如下:

{
    "notifications": {
        "-K-z5koYf8mYZu5OfSGR": {
            "time": "2015-10-06-17-30",
            "state": 1,
            "message": "foo"
        },
        "-K-z5koYf8mYZwgwsfGx": {
            "time": "2015-10-06-17-30",
            "state": 1,
            "message": "bar"
        }
    }
}