我正在创建一个Android应用程序,当用户在firebase上注册帐户时,他会保存他的电子邮件,电话号码和密码。但是当他想登录时,他会使用他的电话号码和密码。由于这个要求我还必须使电话号码唯一有很多方法也这样做但我的选项是有限的,因为数据库已被工作系统使用,我对其进行更改将导致其他系统不工作。在不影响其他系统的情况下解决问题的最佳方法是修改规则以防止用户添加已存在的电话号码。
我的数据库结构是这样的
users {
userID {
name: "John"
phone: "2342222"
address: "23rd Avenue"
email: "email@mail.com"
}userID 2 {
name: "Mark"
phone: "2342222"
address: "5th Avenue"
email: "email@mail.com"
}
}
现在我的规则看起来像这样
service cloud.firestore {
match /databases/{database}/documents {
match /Users/{anything=**} {
allow write: if auth != null && !data.exists() && data == request.auth.uid;
}match /Users/{userId} {
allow read: if request.auth.uid == userId;
// I need a rule maybe here that will allow me write phone number to the database
// If the number doesn't exist in my entire Users database.
}match /user-compare/{anything=**} {
allow read: if true;
}
}
}
我试过
allow write: if request.auth.uid == userId && !request.resource.data.phone in resource.data.phone;
我想确保用户只能读取和写入其用户ID中的数据,但我的规则应该是防止重复数据而不是源代码的规则,因为由于其他系统的设置方式,如果多个用户拥有相同的电话号码,它会崩溃,而现在我的应用程序是使多个用户拥有相同电话号码的唯一方法。
我知道我可以创建一个新的集合来保存数字,然后检查注册过程中是否存在该号码,但是如果有人使用其他系统进行注册,则这些数字不会出现在这个新集合中。
最好的方法是如果我可以写一条规则。我的问题与我所看到的有点不同,我希望我能正确解释。任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
无论我尝试什么,我无法用规则解决它,但使用Firebase Admin SDK将允许开发人员在服务的身份验证部分中编写/编辑/查看信息,这将允许您进行更改并验证它们。您可以了解更多Here。这可以作为对应用程序的依赖添加,但由于服务的性质,我不认为让用户访问具有管理员权限的应用程序是安全的。但是,当您在办公室中拥有应用程序时,这是一个解决方案,用户只能在保存环境中访问它,并且可以用于为员工或授权成员的使用添加更多功能。
对我来说,解决我的安全问题的是在服务器上安装Admin SDK。对于我的问题,这可以用两种方式。我可以创建自定义身份验证Here并使用它来使用他们的电话号码和密码登录用户。但我选择做的是制作一个简单的API来获取电话号码,并检查是否有任何与之相关的电子邮件地址。如果是,则检索电子邮件并将其与密码一起使用,并使用电子邮件和密码登录。所以基本上它使用通常的电子邮件和密码登录,但用户输入他们的号码和密码。这对我有用,我希望它能帮助处于类似位置的人。