firebase数据验证失败

时间:2015-12-06 21:04:54

标签: validation firebase rules

第一次在新项目上使用Firebase,当我包含验证规则时,我在编写活动事件时收到权限被拒绝消息。

验证规则如下:

"activity": {
".read": "auth != null",
".write": "auth != null",
".validate": "newData.hasChildren(['user'])",
".indexOn": ["when"]
}

在新的活动事件中,我推送一个新条目,获取令牌ID并使其(现在)部分数据被推送。在调试中观察这个(使用自定义令牌认证系统),这就是我所看到的。 json推送了一个“用户”条目,这是auth用户的GUID所以我不确定它为什么会失败。我把json文本隔开了。

utility.js (line 1675)
FIREBASE: Attempt to write {
"id":"-K4oomuOpaY4K2aGUYZA",
"imp":false,
"text":"xxx.",
**"user":"0648480c-xxx"**,
"when":1449363973059
} to /activity/## with auth={"uid":"0648480c-xxx","name":"Greg Merideth"}

/activity:.write: "auth != null" => true
/activity:.validate: "newData.hasChildren(['user'])" => false

FIREBASE: Validation failed. firebase.js (line 195)
FIREBASE: Write was denied firebase.js (line 195)

我甚至尝试将规则更改为“.validate”:“newData.hasChild('user')”具有相同的最终结果。

newData是在查看入站数据包还是我的“auth”数据包?

更新(来自评论)

添加一个新项目会调用传入fbActivity处理程序的函数,然后调用:

var message = fbActivity.push({
  id: user.fn(), 
  text: t.val(), 
  imp: false, 
  user: user.uid(), 
  when: new Date().getTime()} 

推送新条目。我们没有使用fb.timestamp,因为我们的服务器在fb后面跑了3秒,所以我们的时间戳出来很奇怪。

1 个答案:

答案 0 :(得分:2)

我猜你正在呼叫push()activity下添加新的孩子。在这种情况下,您的规则缺少push()生成的额外级别:

"activity": {
  "$activityid": {
    ".read": "auth != null",
    ".write": "auth != null",
    ".validate": "newData.hasChildren(['user'])",
    ".indexOn": ["when"]
  }
}

如果是这种情况,请花点时间阅读Firebase security guide,其中解释了这个以及关于该语言的许多其他有用的内容。