当规则禁止除用户之外的任何人阅读时,检查 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