有没有办法限制firebase的注册

有没有办法限制firebase的注册,firebase,firebase-security,Firebase,Firebase Security,有没有办法限制用户注册firebase电子邮件/密码帐户,以便新用户无法注册?我有一个只有少数管理员需要访问的小应用程序(我在Firebase admin中手动创建了这个应用程序),现在它的设置方式似乎任何人都可以注入一点javascript并注册一个帐户。Firebase Simple Login是一个为方便而构建的抽象。在使用电子邮件/密码身份验证时,值得记住的是,这只是在该电子邮件和密码之间创建一个映射,并自动生成用于安全规则的身份验证令牌 在您的特定情况下,如果已经创建了所有的“管理员”

有没有办法限制用户注册firebase电子邮件/密码帐户,以便新用户无法注册?我有一个只有少数管理员需要访问的小应用程序(我在Firebase admin中手动创建了这个应用程序),现在它的设置方式似乎任何人都可以注入一点javascript并注册一个帐户。

Firebase Simple Login是一个为方便而构建的抽象。在使用电子邮件/密码身份验证时,值得记住的是,这只是在该电子邮件和密码之间创建一个映射,并自动生成用于安全规则的身份验证令牌

在您的特定情况下,如果已经创建了所有的“管理员”用户,那么您可以通过安全规则实现所需的行为。例如,如果您希望仅允许该列表中经过身份验证的用户对Firebase数据树进行读/写访问,请尝试编写要求该用户位于“管理员”列表中的顶级读/写安全规则:

上述规则确保用户经过身份验证(通过
auth!=null
),并要求经过身份验证的用户id位于管理员列表中(
root.child('admins').hasChild(auth.uid)

最后一步是通过将这些用户写入
admins
子树,使其成为管理员。假设您有用户1、4和7来进行管理员,请更新数据树以反映以下内容:

{
  ...
  "admins": {
    "1": true,
    "4": true,
    "7": true
  }
}

因此,即使其他用户能够使用Firebase Simple Login生成新的电子邮件/密码映射,这些映射也不会对您的应用程序产生影响,因为它受到安全规则的限制。

@RobDiMarco提供了一个很好的答案,但它有一个缺陷

如果
auth.uid
为空字符串,则规则
root.child('admins').hasChild(auth.uid)
将通过

您可以在Firebase数据库安全模拟器中进行测试,清除
uid
字段(
{“提供者”:“匿名”、“uid”:“}


此规则
root.child('admins').child(auth.uid).val()==true
不会以空的
uid

传递。您还可以通过添加云函数关闭新用户注册,该函数在注册时删除新用户。看看这个答案:


这是一个很好的例子。简而言之:使用自定义登录或简单地阻止对未授权的帐户进行读/写操作。这是一个很好的答案。非常感谢你的帮助!我试图在Bolt中编写“root.child('admins').hasChild(auth.uid)”。我假设它是“root.admins.uid!=null”,但它被转换为“root.child('admins').child('uid').val()!=null”,然后它就不工作了=(root.admins[auth.uid]!=Null虽然这在新用户不允许读/写的情况下有效,但仍然不能阻止某人在您的系统上创建虚拟帐户,对吗?这并不能回答问题。您需要禁用注册,类似于在auth0中禁用注册
{
  ...
  "admins": {
    "1": true,
    "4": true,
    "7": true
  }
}