如何检查客户端上的用户是否仅创建了仅包含firebase.firestore.FieldValue.serverTimestamp()
的文档?
我有以下内容:
allow create: if request.resource.data.timestamp == ??
我应该拥有什么而不是??
。我尝试了serverTimestamp()
firebase.firestore.FieldValue.serverTimestamp()
,now
或now()
,但它不起作用。
可以在Firebase中执行此操作:
".validate": "newData.child('timestamp').val() === now"
我正在寻找相同的解决方案。有任何想法吗?感谢
答案 0 :(得分:10)
您可以使用request.time
属性(docs)访问安全规则中的当前请求时间戳,该属性是与实时数据库now
等效的Firestore。因此,您需要以下内容:
allow create: if request.resource.data.timestamp == request.time;
对于serverTimestamp()
,这应该评估为真。
您应始终验证安全规则中的客户端输入,即使您使用serverTimestamp()
也是如此。安全规则不会自动知道服务器输入的值而不是客户端,因此如果没有此检查,恶意客户端可能会创建一个不同的时间创建。