有没有办法限制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
。