当规则禁止除用户之外的任何人阅读时,检查 Firestore 用户是不是存在

Posted

技术标签:

【中文标题】当规则禁止除用户之外的任何人阅读时,检查 Firestore 用户是不是存在【英文标题】:Check if Firestore user exists when rules forbid anybody but the user to read当规则禁止除用户之外的任何人阅读时,检查 Firestore 用户是否存在 【发布时间】:2021-06-27 17:50:04 【问题描述】:

我为用户集合设置了以下规则

   match /users/userId 
       allow read, write, update: if request.auth != null && request.auth.uid == userId
   

我想检查用户是否存在,但上述规则不允许我这样做。我应该允许所有登录用户拥有read 权限吗?

   FirebaseFirestore.instance
   .collection('users')
   .where('email', isEqualTo: snap[index]['email'])
   .get()

【问题讨论】:

你在使用 Firebase 身份验证吗? 是的。 Firebase 身份验证。 pub.dev/packages/firebase_authfirebase_auth: ^0.20.0 【参考方案1】:

尝试创建一个单独的集合来存储所有电子邮件,然后检查电子邮件是否存在,并相应地显示正确的消息。所有经过身份验证的用户都应该能够访问此集合。

【讨论】:

好的。我想我能做到。我希望我可以跳过创建单独的集合。我还需要用户名和用户照片。因此,每次用户更新其中任何一个时,这个新集合也必须更新。【参考方案2】:

您可以将安全规则设置为仅当 email 字段与用户的电子邮件地址匹配时才匹配。有几件事需要考虑...

    规则不是过滤器。您必须明确搜索此文档 这不适用于电话身份验证用户。如果要处理电话登录,则需要添加另一条规则。
match /users/userId 
  allow read: if request.auth != null && request.auth.email == resource.data.email
  allow write: if request.auth != null && request.auth.uid == userId

【讨论】:

以上是关于当规则禁止除用户之外的任何人阅读时,检查 Firestore 用户是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

编写防火墙规则:禁止除管理员计算机(IP为172.18.25.110)外任何一台计算机访问某主机(IP为172.18.25.1

在外面点击时移除视图

当用户单击页面正文的其他位置时隐藏 nabber [关闭]

RegEx 用于匹配除逗号分隔的数字之外的所有字符

支持除列表视图或列表框之外的数据绑定的 XAML 控件

我正在制作一个不和谐的机器人,并尝试让代码检查所请求的嵌入命令中是不是有除命令之外的任何内容