使用 'now' 的 Firebase 安全时间规则

标签 firebase firebase-realtime-database firebase-security

我有一个 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/

相关文章:

ios - 如何获取其数组包含特定值的 child

ios - Swift Firebase保存/更新具有相同子值的多个父项

firebase - 删除 firebase cloud firestore 中的许多关系

firebase - 在 Firebase 中创建临时匿名用户

java - 如何定期更新 Firebase 实时数据库的位置?

google-cloud-firestore - Firebase安全规则,仅确保一个 “array remove”,并且仅对userId

android - AppInvite.AppInviteApi.getInvitation() 已弃用

javascript - 将循环回调连接到 promise 链

Android - 在 Firestore 中只获取可访问的集合

firebase - 如何限制组成员对文件的访问?