首页 > 解决方案 > 如何在 Firestore 安全规则中使用时间戳

问题描述

想象一下timestamp存储在文档中的类型值。

allow update: if resource.data.customTimestamp.toMillis() == request.time.toMillis()

上面的代码不起作用并抛出以下错误:

找不到函数错误:名称:[toMillis]。

如果我像这样转过身来:

allow update: if request.time.toMillis() == resource.data.customTimestamp.toMillis()

数据访问被拒绝:

模拟数据访问被拒绝

这让我很困惑。

问题

如何将 Firestore 解析timestamp安全规则Timestamp

Firebase 控制台的屏幕截图

测试项目

存储数据 规则模拟器

标签: firebasegoogle-cloud-firestorefirebase-security

解决方案


这里有两个不相关的问题,但本质上是 Firstore 规则模拟器中的错误。

首先,request.time目前没有模拟。不幸的是,试图评估这一点的规则会立即被拒绝,而不是给你一条消息说它不受支持。

其次,应该在文档中的 Timestamp 类型字段上可用的 Timestamp 对象方法被破坏。时间戳字段当前作为没有方法的“空对象”发送到模拟器,因此您无法在模拟器中使用它们的值。

对于这两种情况,已发布的规则应该可以正常工作。


推荐阅读