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

设置Firebase实时数据库规则

殳宸
2023-03-14

我正在尝试为我的Firebase实时数据库设置规则,但我不明白为什么它们不起作用。下面是数据顶部的样子:

假设我希望允许用户读取其用户名与数据中的name字段匹配的数据。我以为这样的事情会奏效

{
  "rules": {
    "lauri_laurela" :{
      "$requestid" :{
        ".read" : "data.child('name').val() == auth.token.name",
      }
    }
  }
}

不幸的是,这对我不起作用。为了学习,我甚至试过这个

{
  "rules": {
    "lauri_laurela" :{
      "$requestid" :{
        ".read" : "data.child('name').exists()",
      }
    }
  }
}

或者甚至

{
  "rules": {
    "lauri_laurela" :{
      "$requestid" :{
        ".read" : true,
      }
    }
  }
}

这到底是怎么回事

{
  "rules": {
    "lauri_laurela" :{
       ".read" : true,
    }
  }
}

共有1个答案

潘宪
2023-03-14

啊。代币仅当设置了“名称”时,“名称”才起作用。因此,请确保您的用户的名字保存在他们的firebase身份验证配置文件中。您可以使用下面的代码来实现这一点。

 FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
    .setDisplayName("User name")
    .build();

user.updateProfile(profileUpdates)
    .addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if (task.isSuccessful()) {
                Log.d(TAG, "User profile updated. Now security rules work");
            }
        }
    });

要确保用户的姓名已保存,您可以将安全规则更改为

"auth.token.name!==null && data.child('name').val() == auth.token.name" 

"auth.token.name!=="" && data.child('name').val() == auth.token.name"

不确定哪个管用!希望这对你有帮助。

 类似资料:
  • 我有一个简单的应用程序,我正在努力学习如何制作,它只显示我定期上传的折扣和优惠券交易数据列表。没有收集用户数据,因此我认为不需要进行身份验证或登录。然而,当我了解并阅读有关存储和检索数据的内容时,似乎我不得不这样做。特别是在firebase实时数据库方面。它告诉我,我的规则是不安全的,因为读和写都被设置为真。我理解“写入”是不安全的,但是如果我没有存储任何个人数据,让“读取”函数对任何人都设置为t

  • 我尝试用规则返回用户聊天列表。所以我不知道对话的id。我尝试了几种方法,但都不起作用,因为你必须知道聊天id。 数据库: 规则: 但当我从react本机应用程序访问时。通过身份验证的用户无法访问聊天记录(uid:3Oi1atf8l2P4Vgsb8tZOGxpUg7q2) *读取失败:错误:权限被拒绝/Chats:客户端没有访问所需数据的权限。 规则: 查询:

  • 我使用以下规则检查只有“管理员”才能写入陷阱部分。 这个很好用。但是如果我把规则改为, 然后我得到了一个权限错误。W/SyncTree:侦听/traps失败:数据库错误:权限被拒绝。 我之所以改变结构,是因为我试图使用validate函数,但由于我无法通过第一个问题,我无法达到验证的程度。 我肯定这是一个新手理解错误,但在尝试了许多排列后,我在这方面进展甚微。您的协助将不胜感激。 更新201606

  • 我有一个数据库: 当用户()在应用程序中注册时,他会填充另一个用户uid(该用户uid具有属性)并将自己的uid添加到他的个人资料中(

  • 如何在Firebase实时数据库中设置安全规则? 我得到了这个信息。 您选择以测试模式开始开发,这将导致您的Cloud Fi还原数据库完全发布在Internet上。您的应用程序更容易受到攻击,因此您的Fi还原安全规则已设置为在头30天后停止接收任何请求。 系统将开始拒绝发送到Firestore数据库的所有客户端请求。在此之前,请编写高强度的安全规则,以便应用程序能够正常运行,同时正确保护您的数据。

  • 如果我在公共模式下使用Firebase实时数据库发布我的Android应用程序会怎么样,因为我不需要任何身份验证。它说 公共访问使您的数据库对任何人开放,即使是不使用您的应用的人,因此请务必在设置身份验证时再次限制您的数据库。 我不清楚,如果他们的应用程序没有连接到我的数据库,而且他们也没有firebase帐户的登录密码,那么他们怎么能访问我的数据库。 提前发送Thx