有没有办法限制Firebase中的注册

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


Firebase简单登录是为了方便而在Firebase自定义登录之上构建的抽象。 使用电子邮件/密码认证时,值得记住的是,这只是创建该电子邮件和密码之间的映射,并自动生成认证令牌以用于您的安全规则。

在您的具体情况中,如果所有“管理员”用户都已创建,则可以通过安全规则实现您要查找的行为。 例如,如果您希望只允许对Firebase数据树的读/写访问权限给该列表中已通过身份验证的用户,请尝试编写要求该用户位于“管理员”列表中的顶级读/写安全规则:

{
  ".read"  : "auth != null && root.child('admins').hasChild(auth.uid)",
  ".write" : "auth != null && root.child('admins').hasChild(auth.uid)"
}

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

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

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

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


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

规则root.child('admins').hasChild(auth.uid)会通过,以防auth.uid为空字符串。

您可以在Firebase数据库安全模拟器中对此进行测试,清除uid字段( { "provider": "anonymous", "uid": ""} )。

仿真结果

这个规则root.child('admins').child(auth.uid).val() === true不会传递一个空的uid

链接地址: http://www.djcxy.com/p/84207.html

上一篇: Is there a way to restrict registrations in firebase

下一篇: Redraw d3 pie chart on click