验证 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" 等前缀,以避免使用数字时出现一些意外结果。
这是数据库架构:
规则如下:
"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" 等前缀,以避免使用数字时出现一些意外结果。