验证 Firebase 密钥是否为整数

Validate a Firebase Key is an integer

这是数据库架构:

规则如下:

"notifications": {
   "$year": {
      ".read": "false",
      ".write": "!data.exists()",
      "$month": {
          ".read": "false",
          ".write": "!data.exists()",

          "$day": {
              ".read": "false",
              ".write": "!data.exists()",

              "$hour": {
                  ".read": "false",
                  ".write": "!data.exists()",

                  "$minute": {
                      ".read": "false",
                      ".write": "!data.exists()",
                      "$data": {
                          ".read": "false",
                          ".write": "!data.exists()"
                      }
                  }
              }
          }
      }
   }

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

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

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

如果使用推送 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"
        }
    }
}

要验证一个键是一个数字:

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

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