使用 'now' 的 Firebase 安全时间规则
Firebase security time rule using 'now'
我有一个 Firebase 安全规则试图在字段时间戳尚未通过时允许写入,即应该允许修改,直到时间超过时间戳数据字段中设置的时间。
"tips": {
".read": true,
"$user_id": {
"tips": {
"$game_id": {
".write": "root.child('/games/' + $game_id + '/timestamp/').val() > now"
}
}
}
为了让这条规则起作用,我有 2 个示例时间戳字段:
timestamp: 1593840696
timestamp: 1393840696
虽然我没有验证 'now' 是什么,但我知道它是纪元时间,当前 date/time 大约是 1493840696。写入 Firebase 时,我希望第一个条目成功更新(它的时间戳在 'now' 时间之后)和第二次失败,就像过去一样。
不过我看到的是两条记录都不允许使用此规则更新?如果我将大于“>”的值更改为小于“<”的值,它们都可以工作。奇怪的?看起来 'now' 的值可能大于 1593840696.
".write": "root.child('/games/' + $game_id + '/timestamp/').val() < now"
在这种情况下,'now' 的值是多少?关于如何工作 through/debug 和实现所需时间戳保护的任何建议?本质上需要 protect/allow 数据更改,直到时间戳字段结束。
我无法使用此规则来触发和保护数据,因此非常感谢您的帮助。
感谢您的任何回复。
Firebase 数据库以 毫秒 纪元起存储时间戳。获得这样一个值的一种简单方法是使用 JavaScript 的 Date.now()
,就像在这个片段中:
console.log(Date.now());
在我写这篇文章时,值为:
1493869428756
为了比较,您的最高值为:
1593840696
所以你似乎在计算自纪元以来的 秒,而不是毫秒。
我有一个 Firebase 安全规则试图在字段时间戳尚未通过时允许写入,即应该允许修改,直到时间超过时间戳数据字段中设置的时间。
"tips": {
".read": true,
"$user_id": {
"tips": {
"$game_id": {
".write": "root.child('/games/' + $game_id + '/timestamp/').val() > now"
}
}
}
为了让这条规则起作用,我有 2 个示例时间戳字段:
timestamp: 1593840696
timestamp: 1393840696
虽然我没有验证 'now' 是什么,但我知道它是纪元时间,当前 date/time 大约是 1493840696。写入 Firebase 时,我希望第一个条目成功更新(它的时间戳在 'now' 时间之后)和第二次失败,就像过去一样。
不过我看到的是两条记录都不允许使用此规则更新?如果我将大于“>”的值更改为小于“<”的值,它们都可以工作。奇怪的?看起来 'now' 的值可能大于 1593840696.
".write": "root.child('/games/' + $game_id + '/timestamp/').val() < now"
在这种情况下,'now' 的值是多少?关于如何工作 through/debug 和实现所需时间戳保护的任何建议?本质上需要 protect/allow 数据更改,直到时间戳字段结束。
我无法使用此规则来触发和保护数据,因此非常感谢您的帮助。
感谢您的任何回复。
Firebase 数据库以 毫秒 纪元起存储时间戳。获得这样一个值的一种简单方法是使用 JavaScript 的 Date.now()
,就像在这个片段中:
console.log(Date.now());
在我写这篇文章时,值为:
1493869428756
为了比较,您的最高值为:
1593840696
所以你似乎在计算自纪元以来的 秒,而不是毫秒。