【发布时间】:2015-12-06 21:04:53
【问题描述】:
第一次在新项目上使用 Firebase,当我在编写活动事件时收到一条权限被拒绝消息,其中包含验证规则。
验证规则如下:
"activity": {
".read": "auth != null",
".write": "auth != null",
".validate": "newData.hasChildren(['user'])",
".indexOn": ["when"]
}
在一个新的活动事件中,我推送一个新条目,获取令牌 ID 并使其(暂时)成为被推送数据的一部分。在调试中观看此内容(使用自定义令牌身份验证系统)时,这就是我所看到的。推送的 json 有一个“用户”条目,它是身份验证用户的 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”数据包?
更新(来自 cmets)
添加一个新项目会调用一个传入 fbActivity 处理程序的函数,然后该处理程序会调用:
var message = fbActivity.push({
id: user.fn(),
text: t.val(),
imp: false,
user: user.uid(),
when: new Date().getTime()}
推送新条目。我们没有使用 fb.timestamp,因为我们的服务器比 fb 慢了 3 秒,所以我们的时间戳很奇怪。
【问题讨论】:
-
我在下面添加了最有可能的答案。如果不是这样,请添加用于写入数据的代码。没有它,就不可能确定出了什么问题。
-
添加一个新项目会调用一个传入 fbActivity 处理程序的函数,该处理程序然后调用: var message = fbActivity.push({id: user.fn(), text: t.val(), imp: false, user: user.uid(), when: new Date().getTime()} 推送新条目。我们没有使用 fb.timestamp,因为我们的服务器比 fb 慢 3 秒,所以我们的时间戳出来很奇怪。
标签: validation firebase rules