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