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

时间:2018-02-14 09:36:26

标签: firebase google-cloud-firestore firebase-security

如何检查客户端上的用户是否仅创建了仅包含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 个答案:

答案 0 :(得分:10)

您可以使用request.time属性(docs)访问安全规则中的当前请求时间戳,该属性是与实时数据库now等效的Firestore。因此,您需要以下内容:

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

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

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