当前位置: 首页 > 知识库问答 >
问题:

如何在Firebase 3.x中停用注册功能

闾丘鸣
2023-03-14

我使用firebase.auth()创建了一些用户。signInWithEmailAndPassword,并希望立即停止注册,但请继续登录。我尝试了一些关于用户的规则,甚至完全停止了对firebase的写入。然而,登记仍然是可能的。在控制台中禁用电子邮件/密码也会禁用登录。

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

知道如何在Firebase 3中将安全规则应用于用户吗?

共有3个答案

华福
2023-03-14

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

如果启用云身份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"
      }
    ]
  }
}

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

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

左丘兴生
2023-03-14

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

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

const functions = require('firebase-functions');
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控制台或由第三方创建用户时,会触发此功能。因此,您必须创建、等待函数,然后启用用户。

任元青
2023-03-14

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

如果不禁用所有用户的登录,则无法禁用注册,这不是您想要的。

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

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

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

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

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

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

然后:

{
  "rules": {
        ".read": "root.child('allowedUids').child(auth.uid).exists()",
        ".write": false,
      }
}
 类似资料:
  • 当进行内联样式化时,如何在ReactJS中实现悬停事件或活动事件? 我发现onMouseEnter、onMouseLeave方法有缺陷,所以希望有另一种方法来实现它。 具体地说,如果您非常快地将鼠标移到组件上,则只注册onMouseEnter事件。onMouseLeave从不激发,因此无法更新状态...使组件看起来就像仍然悬停在上面一样。如果您尝试模拟“:active”css伪类,我也注意到了同样

  • 我想设置一个由多个步骤组成的用户注册。每个步骤将以条的形式突出显示。深灰色条将是完成的步骤,浅灰色条将是需要完成的步骤。似乎想不出这样做的方法。请建议。 我们可以在myfitnesspal注册中看到这一点。我在下图的红色框中突出显示了这一点。

  • 本文向大家介绍如何在C#中使用注册表,包括了如何在C#中使用注册表的使用技巧和注意事项,需要的朋友参考一下 一、什么是注册表         注册表是Microsoft Windows操作系统和其应用程序中的一个重要的层次型数据库,用于存储系统和应用程序的设置信息。由键(key,或称“项”)、子键(subkey,子项)和值项(value)构成。一个键就是树状数据结构中的一个节点,而子键就是这个节点

  • 问题内容: 如何在Swift中使用(以前)? 这是我尝试复制的一个Objective-C示例: 但是,Swift似乎没有,这(似乎)意味着我无法在未实现的方法上调用方法。 我已经在Swift中尝试了基于对象的版本,但似乎使Playground崩溃了: 但是它似乎崩溃了,即使我的对象接受了一个类型的参数 在Swift中执行此操作的最佳方法是什么?有没有一种方法可以避免通过基于对象的注册发送不必要的对

  • https://alpha.app/#session_state=5AD94ADB-39F5-4664-ABC8&code=7BA2-488E-9BF4-AD7B1A969904.B3D26ED7-649A-454D-B6FF-246792277042

  • 我的注册成功。将向邮件发送通知,其中包含有关跟踪链接的请求的文本,然后激活帐户。一切都很好,但不可能将此文本转换为模板,以便将变量存储在其中,并将其发送到邮局,但我不知道如何从java代码中放置thymeleaf 使用者getUsername()用户。getActivationCode() 在我的例子中,它们以相同的形式返回,它们不会给出它们对应的用户的值 我的胸腺 我正在尝试通过上下文读取此文件