Firestore 安全规则:如果时间戳 (FieldValue.serverTimestamp) 等于现在

Posted

技术标签:

【中文标题】Firestore 安全规则:如果时间戳 (FieldValue.serverTimestamp) 等于现在【英文标题】:Firestore Security Rules: If timestamp (FieldValue.serverTimestamp) equals now 【发布时间】:2018-07-24 19:50:49 【问题描述】:

如何检查客户端上的用户是否仅使用firebase.firestore.FieldValue.serverTimestamp() 创建文档?

我有以下内容:

allow create: if request.resource.data.timestamp == ??

我应该用什么来代替??。我试过serverTimestamp()firebase.firestore.FieldValue.serverTimestamp()nownow(),但它不起作用。

在 Firebase 中可以这样做:

".validate": "newData.child('timestamp').val() === now"

我正在寻找相同的解决方案。有任何想法吗?谢谢

【问题讨论】:

【参考方案1】:

您可以使用 request.time 属性 (docs) 在安全规则中访问当前请求时间戳,该属性是 Firestore,相当于实时数据库的 now。因此,你会想要这样的东西:

allow create: if request.resource.data.timestamp == request.time;

对于serverTimestamp(),这应该评估为真。

应始终验证安全规则中的客户端输入,即使您使用的是serverTimestamp()。安全规则不会自动知道服务器输入值而不是客户端,因此如果没有这个检查,恶意客户端可能会创建一个不同的时间。

【讨论】:

以上是关于Firestore 安全规则:如果时间戳 (FieldValue.serverTimestamp) 等于现在的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Firestore更新时间字段安全问题

Firebase Firestore 安全规则 |如果字段值与 auth uid 相同,则允许读取

在 Cloud Firestore 中如何制作一个,只创建一次安全规则

Firestore 安全规则:“PERMISSION_DENIED:权限缺失或不足。”

Firestore 安全规则。用户可以知道人们的 UID 吗?

用于在用户之间共享数据的 Firestore 安全规则