第一次在新项目上使用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秒,所以我们的时间戳出来很奇怪。
答案 0 :(得分:2)
我猜你正在呼叫push()
在activity
下添加新的孩子。在这种情况下,您的规则缺少push()
生成的额外级别:
"activity": {
"$activityid": {
".read": "auth != null",
".write": "auth != null",
".validate": "newData.hasChildren(['user'])",
".indexOn": ["when"]
}
}
如果是这种情况,请花点时间阅读Firebase security guide,其中解释了这个以及关于该语言的许多其他有用的内容。