Firebase.validate未按预期使用$location工作

2024-09-21 11:43:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下Firebase规则,在使验证按预期工作时遇到问题:

{
  "rules": {
    ".read": true,
    ".write": true,

    "specialItems": {
      "$itemid": {
        ".validate": "root.child('items/' + $itemid).exists()"
      }
    }
  }
}

my.validate规则的目的是,只有在“items”列表中已经存在的条目时,才会接受它。不幸的是Firebase允许我添加到specialItems中,这是毫无疑问的,因为我误解了验证应该如何工作。

我使用appenginepythonurlphetchapi通过REST与firebase对话,并使用PATCH方法。

^{pr2}$

当从一个空数据库开始时,这会给我留下一个完整的数据树,它看起来像:

specialItems
  -- myItem: "ok"

我原以为这棵树不符合验证规则。我也尝试过使用PUT,它有相同的效果:

url = "https://<my-app>.firebaseio.com/specialItems/myItem.json?auth=" + token
result = urlfetch.fetch(url=url, payload='"ok"', method=urlfetch.PUT)

另一件要注意的事是,我当前需要使用“admin:True”进行身份验证才能写入任何内容,尽管我的规则似乎表明任何人都应该具有读/写权限。这让我想知道我的规则是否被应用了-如果是这样,那么我不确定如何启用我的规则-它们就在“安全和规则”窗格中。我还假设admin不允许违反模式验证规则。


Tags: trueurladminput规则myitemsok
2条回答

请尝试以下代码

{
  "rules": {
    ".read": true,
    ".write": true,

    "specialItems": {
      "$itemid": {
        ".validate": "root.child('items').hasChild($itemid)"
      }
    }
  }
}

您可以使用仪表板上的模拟器来测试规则。如果不需要身份验证,请确保已选中“启用匿名用户身份验证”,请进行身份验证,然后输入url并检查读写结果。在

你的假设不正确。使用admin: true进行身份验证将绕过安全规则。因此,您的.validate规则将不会在这种情况下应用。.validate规则本身没有任何物理错误。在

另外,假设您的问题准确地反映了实际情况,这里不需要身份验证。根路径上的.write/.readtrue将允许访问Firebase中的任何数据。很有可能,您的规则运行得很好,并且阻止了写入,这就是为什么您错误地认为需要admin: true来写入数据。在

请按照赛义德在回答中的建议,检查模拟器。在

相关问题 更多 >

    热门问题