Firestore 安全规则,允许用户查询单个文档

Posted

技术标签:

【中文标题】Firestore 安全规则,允许用户查询单个文档【英文标题】:Firestore security rules to allow users to query for a single document 【发布时间】:2019-11-07 08:50:09 【问题描述】:

我有一个email 集合,任何用户(公共)都可以使用他的电子邮件添加新文档。

docID: 
  email: 'my@user.com'

所以现在我对email 集合的安全规则是:

match /email/documentID 
  allow read: if request.auth.token.admin == true;
  allow create: if true;

因为我不希望用户能够阅读其他用户的电子邮件。

但我希望客户端代码能够查询用户自己的电子邮件,以避免在我的数据库中出现重复。所以我希望我的客户端代码能够做到这一点:

const querySnapshot = await
props.firebase.firestore().collection('email').where('email', '==', email).get();

问题

我应该如何编写我的安全规则来实现这种行为?

我不希望他们能够查询完整的 email 集合。

【问题讨论】:

【参考方案1】:

我认为这是不可能的。考虑改为编写一个云函数,将电子邮件地址作为输入,查询电子邮件集合,然后向客户端返回一个布尔值,指示它是否存在。

请注意,这允许任何人有效地查询任何电子邮件地址,而不仅仅是“他们自己的”(无论您如何定义该所有权)。

【讨论】:

以上是关于Firestore 安全规则,允许用户查询单个文档的主要内容,如果未能解决你的问题,请参考以下文章

即使firestore安全规则中的文档字段不可用,也如何允许访问?

Firestore 安全规则 - 允许基于其父文档数据读取子集合

Firebase Firestore - 基于“where”查询参数的安全规则

Firebase Firestore 安全规则 |如果字段值与 auth uid 相同,则允许读取

Cloud Firestore 安全规则 -(读取、写入)

Firestore 规则:允许使用密码访问文档