【问题标题】:Firebase rules for increment operation not working增量操作的 Firebase 规则不起作用
【发布时间】:2017-07-28 22:21:57
【问题描述】:

我有一个非常简单的 Firebase 数据库,只有一个条目“async-testing/companies:0”。

我有以下 firebase 规则,如果 "companies" 未定义,则将其设置为 0,否则如果它比 "companies" 的当前值大 1,则允许写入:

{
  "rules": {
      ".read": "auth != null",
      ".write": "auth != null",
      "async-testing": {
        "companies": {  
              ".validate": "(data.exists() && (newData.val() === data.val() + 1)) || (!data.exists() && newData.val() == 0)" 
        }
      }
  }
}

但是,当我尝试在 Firebase 模拟器中将“公司”设置为 1 时,它不起作用:

更奇怪的是,当我将 Firebase 规则设置为仅在 "companies" 未定义时才接受写入时,它可以正常工作:

{
  "rules": {
      ".read": "auth != null",
      ".write": "auth != null",
      "async-testing": {
        "companies": {  
              ".validate": "!data.exists()" 
        }
      }
  }
}

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 你能告诉我们错误详情吗
  • 我刚试过,效果很好..
  • 嗯,很奇怪。我又试了一次,还是不行。我还尝试使用真实请求写入 db,并且我尝试的每个查询都经过(包括 {"companies": 3} 之类的内容)
  • 您的数据库中没有拼写错误?在公司还是异步测试?

标签: firebase firebase-realtime-database firebase-security


【解决方案1】:

在模拟器图像中,位置字段显示 https://async-testing.firebaseio.com/。这表明您的项目名称是async-testing。 (我不知道你是怎么得到这么简单的项目名称的。我的都包含一些自动生成的数字或其他文本。)

在您的数据库图像中,async-testing 被列出来代表您的数据库的根。这不是一条路径。相信你把async-testing的外观误认为是路径组件,必须包含在规则中。

正如@JoeWu 在他的回答中指出的那样(我赞成),您的规则不应将async-testing 包含为companies 的父位置。或者,如果您想保持规则不变,则需要重新创建数据库以创建根子 async-testing,并创建 companies 作为它的子。

【讨论】:

    【解决方案2】:

    “异步测试”层不是必需的。试试:

    {
      "rules": {
          ".read": "auth != null",
          ".write": "auth != null",
            "companies": {  
                  ".validate": "(data.exists() && (newData.val() === data.val() + 1)) || (!data.exists() && newData.val() == 0)" 
            }
      }
    }
    

    【讨论】:

    • 您的解决方案有效,我认为问题在于我将根路径设置为与数据库相同的名称。谢谢!
    【解决方案3】:

    我试过了,效果很好。

    检查:

    • 检查您的公司是否真的设置为 0。
    • 在没有模拟器的情况下使用真实请求进行尝试(以防万一)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-30
      • 2018-03-12
      • 2017-01-25
      • 1970-01-01
      • 2018-11-05
      • 2020-08-24
      相关资源
      最近更新 更多