首页 文章

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

提问于
浏览
12

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

{
  "rules": {
        ".read": true,
        ".write": false,
      }
}

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

2 回答

  • 23

    好吧,问题被问到了几天,但也许这对那些仍然想知道答案的人有帮助,我们仍然不能简单地禁用新的帐户创建,但我们可以使用Firebase功能:

    以下是使用 Cloud 功能自动禁用新用户的解决方法 .

    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 ));
    });
    

    请记住,使用Firebase Web控制台或第三方创建用户时会触发此功能 . 所以你必须创建,等待该功能,然后启用用户 .

  • 1

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

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

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

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

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

    {
      "rules": {
            ".read": "auth.uid == '123abc' || auth.uid == 'def456'",
            ".write": false,
          }
    }
    

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

    "allowedUids": {
        "123abc": true,
        "def456": true
    }
    

    然后:

    {
      "rules": {
            ".read": "root.child('allowedUids').child(auth.uid).exists()",
            ".write": false,
          }
    }
    

相关问题