【问题标题】:Role-based authentication with Firebase使用 Firebase 进行基于角色的身份验证
【发布时间】:2016-09-19 10:25:40
【问题描述】:
我是 Firebase 的新手,我正在尝试创建用户身份验证。用户对象具有:用户名、电子邮件、全名、角色、密码。
现在我希望能够创建具有这些属性的用户并使用用户名/电子邮件和密码进行身份验证。
身份验证后,我想检查用户的角色以确定允许他们访问我的应用程序的哪个部分。
我不知道该怎么做,文档大多只处理电子邮件和密码。
【问题讨论】:
标签:
android
firebase
firebase-authentication
firebase-security
【解决方案1】:
Firebase 目前只支持邮箱+密码认证,不支持用户名+密码。 (当然还有 Facebook、Twitter、匿名等。)不过,您仍然可以进行自己的自定义身份验证。
您仍然可以使用您提到的那些字段在数据库中创建自己的用户对象:(用户名、电子邮件、全名、角色、密码),但这些与 firebase 的身份验证部分是分开的。这个过程,我称之为“注册”,这取决于你来实现。
如果您想控制不同用户可以访问数据库的哪些部分,那么您就是在谈论database rules。
如果您想控制对应用程序本身不同部分的访问,那么您只需按这种方式编写代码。
【解决方案2】:
您可以像这样构建您的数据库,以使用他们的$uid 存储每个用户的信息,并保留每个用户声明的用户名列表,这样您就可以有一个写入规则来防止覆盖usernames 中已经存在的用户名。
所以在注册时,您需要使用FIRAuth 使用电子邮件和密码进行注册,然后在完成后,您将获得FIRUser。然后,您可以使用uid 将用户名、角色等写入数据库"users/$uid": {"username": "callam", ...} 中的用户位置以及用户名位置"usernames/$username": "$uid" 中的用户名。
您需要为"users/$uid" 和"usernames/$username" 实施写入/验证规则,以确保用户名尚未被使用。
{
"users": {
$uid: {
"username": "callam",
...
"role": "member"
}
},
"usernames": {
"callam": $uid
}
}