Firebase-预定义的用户列表和电话号码身份验证

时间:2020-05-15 14:03:45

标签: android firebase firebase-realtime-database firebase-authentication

我正在开发一个Android APP,并希望将其与Firebase及其实时数据库集成。我有1000个用户(Excel)的列表,其中包含EmpId,EmpName,团队,手机号码等详细信息。

我想仅将我的APP限制为该列表中的用户,并且还希望使用列表中存在的手机号码对该用户进行身份验证。

我可以使用Firebase Auth来满足上述要求吗?如果可以,该怎么做?

如果使用FireBase Auth,这是不可能的替代解决方案?

请帮助。

1 个答案:

答案 0 :(得分:1)

Firebase身份验证仅允许用户标识自己。您所描述的是限制允许哪些用户使用您的应用程序,这就是所谓的授权,而Firebase身份验证则无法处理。

幸运的是,您也用firebase-realtime-database进行了标记,并且权限肯定内置在其中。我通常要做的是在数据库中创建一个顶级节点,其中包含允许使用该应用程序的用户的UID:

"allowedUsers": {
  "uidOfUser1": true,
  "uidOfUser2": true
  ...
}

然后在其他安全规则中,您将在允许用户访问数据之前,检查用户的UID是否在此列表中,例如:

{
  "rules": {
    "employees": {
      ".read": "root.child('allowedUsers').child(auth.uid).exists()",
      "$uid": {
        ".read": "auth.uid === $uid && root.child('allowedUsers').child(auth.uid).exists()"
      }
    }
  }
}

具有以下规则:

  • 已登录的允许用户可以读取所有员工数据。
  • 但是他们只能修改自己的员工数据。

当然,您需要修改这些规则以适合您自己的要求,但是希望这可以使您入门。

请记住以下几点:

  • 仅当用户在Firebase身份验证中注册后才创建UID。这意味着您可能必须从您拥有的电子邮件地址映射到相应的UID。您可以通过预先创建所有用户来进行此操作,也可以分批进行,或者通过use a Cloud Function that triggers on user creation将已知用户添加到allowedUsers列表中。
  • 或者,您可以将电子邮件地址列表存储在数据库中。请记住,除非您需要验证电子邮件地址,否则其他人可以使用其他人的电子邮件地址登录。哦,而且您不能按原样将电子邮件地址作为密钥存储在数据库中,因为不允许使用.个字符,因此您必须对此进行某种形式的编码。

另请参阅: