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()
、now
或now()
,但它不起作用。
在 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 安全规则 |如果字段值与 auth uid 相同,则允许读取
在 Cloud Firestore 中如何制作一个,只创建一次安全规则
Firestore 安全规则:“PERMISSION_DENIED:权限缺失或不足。”