我正在用Firestore创建一个博客。我有两个集合,分别称为users
和blogPosts
。 blogPosts
中的每个文档都包含name
,createdAt
,createdBy
和password
(纯字符串)字段。
我想创建一个安全规则,以便客户端只有提供正确的文档password
才能访问文档。
根据this link中的一个想法,我写了这样的规则:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /blogPosts/{postUid} {
allow write: if
request.resource.data.createdBy == request.auth.uid &&
request.resource.data.name is string &&
request.resource.data.name.size() > 2 &&
request.resource.data.name.size() < 32 &&
request.resource.data.password is string &&
request.resource.data.password.size() > 5 &&
request.resource.data.password.size() < 32
allow read: if
request.auth != null &&
request.resource.data.password == resource.data.password // <---- THIS LINE IS NOT WORKING
}
}
}
我在操场上遇到了以上规则:Error: simulator.rules line [16], column [8]. Property resource is undefined on object.
的错误,因此这意味着我们在resource.data
个查询中没有read
。
如何使用Firebase安全规则实现我的目标,因此只有具有blogPosts
密码的客户端才能访问文档?
答案 0 :(得分:1)
使用安全规则是不可能的(而且也不是完全“安全”的)。客户端应用程序不能简单地在查询中传递一些密码。唯一检查输入的时间是写操作中的文档字段,而不是文档读取。
如果要检查密码,则必须建立某种API端点,并要求调用方将密码提供给该端点。再次提醒您,此密码与您将密码保密的能力一样安全,因为一旦知道该密码(也许只需对应用程序进行反向工程),任何人都可以使用它。