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

Firebase规则实时数据库

凌昕
2023-03-14

我尝试用规则返回用户聊天列表。所以我不知道对话的id。我尝试了几种方法,但都不起作用,因为你必须知道聊天id。

数据库:

{
  "Chats" : {
    "-MPnCVZSVi5C3QbHnXl3" : {
      "messages" : [ {
        "createdAt" : 1609324431814,
        "text" : "Gggwdhj",
        "user" : "3Oi1atf8l2P4Vgsb8tZOGxpUg7q2"
      } ],
      "name" : "toto",
      "users" : {
        "3Oi1atf8l2P4Vgsb8tZOGxpUg7q2" : true
      }
    }
  }
}

规则:

   {
      "rules": {
           
         "Chats": {
            
              ".read": "data.child('users').hasChild(auth.uid)",
              ".write": "true"
            
    
          }
      }
    }

但当我从react本机应用程序访问时。通过身份验证的用户无法访问聊天记录(uid:3Oi1atf8l2P4Vgsb8tZOGxpUg7q2)

*读取失败:错误:权限被拒绝/Chats:客户端没有访问所需数据的权限。

规则:

{
  "rules": {
     "Chats": {
        "$uid":{
          ".read": "data.child('users').hasChild(auth.uid)",
          ".write": "true"
        }

      }
  }
}

查询:

 firebase.database().ref('Chats')
        .limitToLast(20)
        .on('child_added', snapshot => {
            callback(this.parse(snapshot))
        }, function (errorObject) {
            console.log("The read failed: " + errorObject);
        });

共有1个答案

甄鹏云
2023-03-14

如果要将特定规则/规则集应用于所有子节点,可以使用如下通配符:

{
  "rules": {           
     "Chats": {
        "$chatId": {
           ".read": "data.child('users').hasChild(auth.uid)",
           ".write": "true"
        }            
     }
  }
}

有关这方面的详细信息,请参阅$通配符变量上的Firebase留档。总的来说,我建议您端到端地阅读有关安全规则的Firebase文档,因为它们并不长,现在花几个小时在那里会为您节省更多的时间。

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

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

  • 更新2019-11-03:添加了错误的实时最小复制。在Chrome中加载链接后,点击ctrl shift i并选择控制台以查看输出。我已经尽力确保这正是我最初的项目代码所做的;我们看看情况是否如此,嗯?碎片的规则文件与下面的原始帖子相同。该源代码可在GitHub上获得。 原文: 这些规则在模拟器中工作,但在我真正的网络应用程序中不工作。模拟器路径和有效负载与下面数据库日志输出中显示的相同。 (将两

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

  • 我有一个关于firebase实时数据库规则的问题。 有人创建了一个帐户,该帐户在实时数据库中创建了一个路径: 结构很简单(密钥、用户ID和其他数据)。 这是我的规则: 但现在问题来了。如何允许用户写入此对象?每个拥有代码的人(请参阅BQUyhq)w3D)都可以写入对象id。如果没有代码,他们就无法写入对象id。 有可能发生这样的事吗?如果是的话,我该怎么做呢。

  • 我正在尝试为我的Firebase实时数据库设置规则,但我不明白为什么它们不起作用。下面是数据顶部的样子: 假设我希望允许用户读取其用户名与数据中的name字段匹配的数据。我以为这样的事情会奏效 不幸的是,这对我不起作用。为了学习,我甚至试过这个 或者甚至 这到底是怎么回事