我想检查用户的用户名和电话号码是否唯一。我已经用FirebaseFirestore实现了它。getInstance()。集合(“用户”)。whereEqualTo(“电话”,ph)。get()。addOnCompleteListener(…)
这是我的firestore规则:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: true;
allow write: if request.auth.uid != null;
}
match /Users/{userID} {
allow update: if request.auth.uid == userID
&& (request.resource.data.username == resource.data.username
|| isUserNameAvailable(request.resource.data.username)
);
}
}
代码运行良好,没有问题。我在使用signInWithCredential
方法和请求之前检查这个。啊。uid将始终为空。要使代码工作,我必须保持allow read:true
我们检测到您的安全规则存在以下问题:任何用户都可以读取您的整个数据库
有什么办法可以防止这种情况发生吗?
这是开发人员在使用用户名时经常犯的错误。你允许任何人阅读你的整个数据库。即使你成功地将其设置为只读取
用户
任何人都可以读取你所有的用户数据。
我建议删除第一个
allow read:true
,并按原样为每个路径编写规则。另外,只为用户名创建一个单独的集合
,并将它们全部保存在那里,比如/usernames/${username}
和/phones/${phone}
。如果需要一起保存,你可以这样做。
这样,您可以非常容易地检查,而无需任何查询,如果
用户名
或电话
存在,只需检查该路径是否存在于您的数据库中。
您可以非常轻松地将
users
集合与这两个集合同步,甚至可以编写安全规则,防止在集合中创建具有已存在于usernames集合中的username
的用户。
null 谢了!
我正在使用Firebase Cloud Firestore,我想修改我的规则来限制用户查询集合。 这是不允许的:
目前,我正在尝试将与存储在集合中的的id进行匹配: 这是写的还是我做错了什么。任何帮助都很感激。
问题内容: 如何查看表具有的排序规则?IE浏览器,我想看: 问题答案: 显示有关表的信息,包括排序规则。 例如
将true更改为request.auth.uid!=null后,它会出现错误: 我可以弄清楚获取用户数据,比如:电子邮件和密码或用户id令牌,如何使用用户数据解决上述错误?
问题是我不能使用具有这些规则的查询,因为(我发现)无法根据子集合是否包含某个文档进行查询。这意味着我不能列出某个用户所属的所有组。我尝试在作为一部分的映射中列出所有用户,但我无法设置谁可以编辑文档的某些部分的权限,因此这也不起作用。 编辑:据我所知,查询必须以某种方式与规则匹配,否则权限将被拒绝。如何创建一个查询来收集某个用户所在的所有组并满足此规则。