如何在Firebase 3.x中禁用注册

Zim*_*Zim 17 firebase firebase-authentication firebase-realtime-database

我使用firebase.auth().signInWithEmailAndPassword创建了一些用户,并希望立即停止signUp,但保持signIn工作.我尝试了一些关于用户的规则,甚至根本不再写入firebase.但是仍然可以进行注册.在控制台中禁用电子邮件/密码也会禁用登录.

{
  "rules": {
        ".read": true,
        ".write": false,
      }
}
Run Code Online (Sandbox Code Playgroud)

有关如何将安全规则应用于Firebase 3中的用户的任何想法?

Fra*_*len 33

Firebase明确地将身份验证(登录到应用程序)与授权(从应用程序访问数据库或存储资源)分开.

您无法在不禁用所有用户登录的情况下禁用注册,这不是您想要的.

在典型情况下,开发人员将根据经过身份验证的用户开始保护数据库/文件访问.请参阅数据库安全性存储安全性文档中的相关部分.

如果您的用例是您只希望特定用户具有访问权限,则您可能希望实现白名单:允许访问数据的用户列表.

您可以在安全规则中执行此操作:

{
  "rules": {
        ".read": "auth.uid == '123abc' || auth.uid == 'def456'",
        ".write": false,
      }
}
Run Code Online (Sandbox Code Playgroud)

或者(更好)将允许的uid列表放在数据库中并引用安全规则中的uid:

"allowedUids": {
    "123abc": true,
    "def456": true
}
Run Code Online (Sandbox Code Playgroud)

然后:

{
  "rules": {
        ".read": "root.child('allowedUids').child(auth.uid).exists()",
        ".write": false,
      }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!似乎仍然允许您禁用新注册是一项合理的功能,但是哦 (2认同)

Dha*_*raj 25

更新:现在可以直接从 Firebase 控制台禁用注册和帐户删除。

在此输入图像描述


如果启用Cloud Identity API,则可以禁用用户的注册和删除帐户操作,并将其限制为Admin SDK

在此输入图像描述

您可以访问https://console.cloud.google.com/customer-identity/settings来禁用它们。

在现有项目上启用 API 时,您可能会收到此通知:

在此输入图像描述

一旦禁用,使用该createUserWithEmailAndPassword方法会返回 400 错误:

{
  "error": {
    "code": 400,
    "message": "ADMIN_ONLY_OPERATION",
    "errors": [
      {
        "message": "ADMIN_ONLY_OPERATION",
        "domain": "global",
        "reason": "invalid"
      }
    ]
  }
}

Run Code Online (Sandbox Code Playgroud)

请注意,您仍然可以使用 Admin SDK 创建新用户。

可以在此处找到相同的文档

  • 这对于免费帐户使用来说是个好消息。Google Cloud 上的 Identity Platform 不是免费的... (2认同)

Muh*_*Ovi 9

好了,问问题已经有好几天了,但是对于那些仍然想知道答案的人来说,这可能会有所帮助,我们仍然不能简单地禁用新帐户的创建,但是我们可以使用Firebase函数:

这是使用云功能自动禁用新用户的解决方法。

const admin = require("firebase-admin");

exports.blockSignup = functions.auth.user().onCreate(event => {
  return admin.auth().updateUser(event.uid, { disabled: true })
    .then(userRecord => console.log( "Auto blocked user", userRecord.toJSON() ))
    .catch(error => console.log( "Error auto blocking:", error ));
});
Run Code Online (Sandbox Code Playgroud)

请记住,当您使用Firebase Web控制台或第三方创建用户时会触发此功能。因此,您必须创建,等待功能,然后启用用户。

  • 有用。但是,它允许使用例如 google 提供程序和 signInWithPopup() 方法进行首次登录。看来帐户禁用功能是后来出现的。尽管如此,这仍然可以克服,因为在调用signInWithPopup()之后,我们有一个UserCredential类型的承诺,它有一个附加的UserInfo.isNewUser字段,我们可以立即注销用户。 (2认同)

Cho*_*war 5

如果要从FirebaseUIAndroid 应用程序中删除注册选项,则必须添加以下提供程序:

new AuthUI.IdpConfig.EmailBuilder().setAllowNewAccounts(false).build());
Run Code Online (Sandbox Code Playgroud)

该函数将如下所示:

private void FireBaseLoginUI() {
        List<AuthUI.IdpConfig> providers = Collections.singletonList(
                new AuthUI.IdpConfig.EmailBuilder().setAllowNewAccounts(false).build());

        startActivityForResult(
                AuthUI.getInstance()
                        .createSignInIntentBuilder()
                        .setAvailableProviders(providers)
                        .setLogo(R.drawable.app_logo)
                        .setTheme(R.style.AuthUITheme)
                        .build(),
                RC_SIGN_IN);
}
Run Code Online (Sandbox Code Playgroud)