【问题标题】:firebase - security rules RESTfirebase - 安全规则 REST
【发布时间】:2016-07-30 03:19:46
【问题描述】:

我正在试验Firebase 并对security rules 感到好奇。

假设您有一个 firebase 数据集,表示为:

{
 "myNewData" : "Some String"
}

您如何编写规则,以便只有写入的对象具有键名 myNewData

我正在使用POST 方法,数据在 Firebase 中的结构如下:

-myFireBaseapp
  -someData
       -RandomFirebaseKey
           -myNewData
       -RandomFirebaseKey
           -myNewData

在我想出的模拟器中

{
  "rules": {
      ".read":true,
        "$someData":{
       ".write":true,         
        ".validate": "newData.hasChild('myNewData')"
        }

    }
  }

在模拟器中有效,但在邮递员中无效。

POST

http://myfirebase.app.bucket/someData.json

   {
     "myNewData" : "Some String"
    }

感谢您提供任何信息。

【问题讨论】:

  • 显示使 REST 调用失败的最少代码。
  • @FrankvanPuffelen REST 调用属于邮递员。在上方添加了电话后
  • 该请求没有发送任何数据,因此不满足安全规则。没有minimal, complete example of what you're trying to do,很难提供帮助。例如,在这种情况下,您的数据结构的两个样本因myNewData 是否是值的键而异。我会写一个答案,希望对你有帮助。
  • @FrankvanPuffelen 实际上我要发送的数据在上面。这只是键/值 "myNewData" : "Some String"
  • @FrankvanPuffelen 当我删除邮递员请求的规则时,但当然不适合我的情况。

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


【解决方案1】:

如果您希望您的数据始终有一个键 /someData/<anyKey>/myNewData 任何值,您可以使用验证它

{
  "rules": {
      ".read":true,
      "someData":{
          "$anyKey": {
              ".write":true,         
              ".validate": "newData.hasChild('myNewData')"
          }
       }
   }
 }

如果你眯着眼睛,你仍然可以看到这些规则/someData/$anyKey/myNewData中的路径。

如果您还想验证 myNewData 的值是否为字符串,您可以将规则扩展为:

{
  "rules": {
      ".read":true,
      "someData":{
          "$anyKey": {
              ".write":true,         
              ".validate": "newData.hasChild('myNewData')",
              "myNewData": {
                  ".validate": "data.isString()"
              },
              "$other": {
                  ".validate": false
              }
          }
       }
   }
 }

我还在最后一个示例中添加了"$other: { ".validate": false },以确保使用任何未指定键的写入都被拒绝。所以现在/someData/$anyKey 只能包含一个myNewData 属性,它是一个字符串。

这在 Using $ Variables to Capture Path Segments 上的 Firebase 文档中都有介绍,我强烈建议您学习。

【讨论】:

  • 太棒了。非常感谢这个例子。将在几个小时内试一试,然后向您报告。
  • 我简要浏览了他们的文档,但没有掌握变量功能。谢谢
猜你喜欢
  • 2016-06-27
  • 1970-01-01
  • 2016-08-19
  • 2020-09-06
  • 2016-07-16
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
相关资源
最近更新 更多