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

Ond*_*hák 7 firebase firebase-security google-cloud-firestore

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

我有以下内容:

allow create: if request.resource.data.timestamp == ??
Run Code Online (Sandbox Code Playgroud)

我该怎么做而不是??.我曾尝试serverTimestamp() firebase.firestore.FieldValue.serverTimestamp(),nownow()但它不能正常工作.

可以在Firebase中执行此操作:

".validate": "newData.child('timestamp').val() === now"
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*ald 15

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

allow create: if request.resource.data.timestamp == request.time;
Run Code Online (Sandbox Code Playgroud)

为此serverTimestamp()应该评估为真.

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