【问题标题】:Validate a Firebase Key is an integer验证 Firebase 密钥是否为整数
【发布时间】:2015-10-06 20:46:33
【问题描述】:

这是数据库架构:

规则如下:

"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 没有针对这种情况的东西。

更新: 这不是重复的,我正在寻找一个解决方法,或者其他可以帮助我实现我所追求的东西。

【问题讨论】:

  • Validating a Firebase Key的可能重复
  • 更新:这不是重复的,我正在寻找一种解决方法,或者其他可以帮助我实现我所追求的东西。

标签: firebase firebase-security


【解决方案1】:

验证键是否为数字:

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

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

【讨论】:

  • 非常感谢您的回答和前缀提示!
【解决方案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"
        }
    }
}

【讨论】:

  • 可以验证密钥。
猜你喜欢
  • 2017-04-09
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
相关资源
最近更新 更多