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

测试数据库的用户名,无需验证[Firebase/Swift 3]

郑景胜
2023-03-14

我目前的问题是,当用户想要在我的应用程序(使用Firebase)上创建帐户时,会发生以下错误:

2017-07-12 21:57:05.958 GeneralMessage[8525][Firebase/Database][I-RDB038012]侦听器位于/users失败:权限被拒绝

我意识到发生错误是因为用户试图从数据库中读取,而没有登录到帐户(经过身份验证)。问题还在于,用户在测试是否使用名称时(在他们创建帐户之前)永远不会进行身份验证。

我知道你可以编辑实时数据库规则,允许未经身份验证的用户访问数据库,但我也了解到这是一种安全隐患,应该只在测试期间使用。

我的想法是在用户单击“创建帐户”按钮时对其进行临时身份验证,但我也不确定如何进行验证。

感谢您的任何帮助:)

共有1个答案

仲孙献
2023-03-14

如果希望未经身份验证的用户能够读取数据库的一部分,则需要修改安全规则以允许读取。对于特定的应用程序实例,暂时没有办法这样做,因为这需要识别每个应用程序实例,比如用户。

我知道两种方法:

  1. 先用匿名认证登录用户
  2. 将用户名存储在树的未保护部分

或者,您可以使用匿名身份验证初始登录用户:

Auth.auth().signInAnonymously() { (user, error) in
  // ...
}

这只是部分确保了数据访问的安全性:由于用户无法证明自己的身份,因此任何人都可以相对轻松地访问数据。这就是为什么我建议限制他们可以访问的数据。。。

这种方法非常常见:您希望用户名是公开可读的,因此您将其存储在数据库的单独部分中。

usernames
  "T. Dess": 8295647
  "Frank van Puffelen": 209103

然后用你的安全规则:

{
  "rules": {
    "users": {
      ".read": "auth !== null",
      "$uid": {
        ".write": "auth.uid === $uid"
      }
    },
    "usernames": {
      ".read": true
    }
  }
}

根据这些规则:

  • 任何人都可以读取用户名
  • 任何经过身份验证的用户都可以读取用户配置文件
  • 每个登录用户只能修改自己的用户配置文件
 类似资料:
  • 我有一个firebase实时数据库,具有读/写功能,但是我没有任何用户,也不打算对用户进行身份验证。数据由事件侦听器和调度器(java)编写,我的html ui应用程序应该只读取数据。 我应该如何保护我的db? 在开发(不安全)模式下,我可以使用任何http客户端来写/读数据?如何在保护身份验证后通过身份验证?

  • 我正在做一个React本地项目,使用Firebase。 我试图让用户在验证了他们的电子邮件地址后登录。我在注册时向用户发送一封电子邮件,用户单击验证链接以验证自己,然后应该能够登录。我当前的代码允许用户在验证后登录,但只有在我刷新了应用程序之后。我希望用户在验证后登录而无需刷新应用程序。我发现我可以在Firebase中使用getIdToken()来实现它。但不知何故,我似乎无法让它工作。有什么指示

  • 我正在构建一个React web应用程序,通过Firebase实时数据库查看JSON数据库。在没有身份验证的情况下获取数据非常有效! 实时数据库的规则如下所示: 我现在正在尝试允许匿名身份验证。我通过“登录方法”启用了它,并在javascript中添加了一个匿名登录和控制台登录用户的功能。 我的实时数据库规则现在是: 匿名用户已经创建,但是我不能像以前那样获取我的数据。在Firebase或我的ja

  • 我使用Firebase实时数据库作为后端。我希望每个请求最多增加1个。例如: 这不管用。 在前端,我发送“数据1”。我应该如何创建“.validate”规则?

  • 如何通过firebase发送OTP并在不登录的情况下进行验证?与正常情况一样,firebase接收otp并使用PhoneNumber呼叫SigninWithSign,然后登录firebase。我不想用那种方法登录。我只想从firebase获得otp,并验证它是否正确,如果正确,则执行我的自定义操作。提前谢谢。或者,我需要使用otp进行自定义验证。建议我任何其他方法来验证otp是否正确(SMS)。