【发布时间】:2018-01-02 15:05:09
【问题描述】:
我正在制作一个 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 内读写数据,但我的规则应该是防止重复数据而不是源代码的规则,因为由于其他系统的设置方式,如果多个用户拥有相同的电话号码,它会崩溃,现在我的应用程序是让多个用户使用相同的电话号码的唯一方法。
我知道我可以创建一个新集合来保存这些号码,然后检查该号码是否存在用于注册过程,但如果有人使用其他系统注册,号码将不会出现在这个新集合中。
最好的办法是如果我能写一条规则。我的问题与我所看到的有点不同,我希望我能正确解释。任何帮助将不胜感激,谢谢。
【问题讨论】:
-
您应该使用 Firebase 身份验证,因为它提供了唯一的手机号码登录功能。除此之外,如果登录成功,您还应该保存该手机号码以及电子邮件和其他用户信息。
-
是的,这就是所使用的,但是 Firebase SDK 的设置方式,除非我安装了 admin sdk 但我不想使用它,所以最好避免这种情况,因为我无法编辑我将在那里轻松保存的信息。
标签: android firebase firebase-security google-cloud-firestore