首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单Firebase验证规则(isNumber)无效

简单Firebase验证规则(isNumber)无效
EN

Stack Overflow用户
提问于 2017-07-05 15:11:43
回答 2查看 580关注 0票数 2

数据库结构(消防控制台.数据):

代码语言:javascript
复制
{
"competitors": {
    0: {
        "name": "Arnold",
        "position": 1
    },
    1: ...
}

规则:

代码语言:javascript
复制
{
    "rules": {
        ".read": true,
        ".write": true,

        "competitors": {
            "$competitor": {
                "position": {
                    ".validate": "newData.isNumber()"
                }
            }
        }
    }
}

当我试图模拟从控制台模拟器中添加字符串值时,该规则工作正常--据报告违反了该规则。但是,当我真正地将职位的值添加或更改为字符串时(来自Firebase控制台),则将无错误地添加该值。

如何正确设置只允许数字值的验证规则?

更新(基于奥斯曼的评论)

以下可供选择的形式产生了同样的结果:

代码语言:javascript
复制
{
    "rules": {
        ".read": true,
        ".write": true,

        "competitors": {
            "$competitor": {
                ".validate": "newData.child('position').isNumber()"
            }
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2017-07-05 15:47:45

您需要像这样使用val()来读取这个值:

代码语言:javascript
复制
".validate": "newData.val().isNumber()"
票数 0
EN

Stack Overflow用户

发布于 2018-11-24 18:35:40

你已经做对了,但这是个陷阱

如果您直接通过firebase console编辑数据,则firebase规则将无法工作。相反,尝试使用firebase更新或设置数据,它将引发错误PERMISSION_DENIED

示例:考虑一个非常简单的db

代码语言:javascript
复制
{
  number_only: 3
}

非常简单的规则

代码语言:javascript
复制
{
  "rules":{
     "number_only":{
       ".write": true,
       ".validate": "newData.isNumber()"
     }
  }
}

测试它:

  1. 通过控制台将number_only设置为"str“-应工作
  2. 使用Firebase Javascript firebase.database.ref('number_only').set('str') -将引发错误
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44930043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档