【问题标题】:Trouble implementing firebase rules执行 Firebase 规则时遇到问题
【发布时间】:2019-07-17 18:21:48
【问题描述】:

我在使用以下数据库规则从客户端(我的 iOS 应用程序)上的数据库读取和写入数据时遇到问题:

// Checks auth uid equals database node uid
// In other words, the User can only access their own data

{


"rules": {
    "posts": {
       "$uid": {
         ".read": "$uid === auth.uid",
         ".write": "$uid === auth.uid"
       }
     }
   }
}

但是,当使用以下规则时,我在读取和写入数据时没有问题:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

我的目标是让每个用户只能读取/写入自己的数据。任何建议/帮助将不胜感激。

编辑:

尝试发帖时,我使用以下 (iOS):

let key = ref?.childByAutoId().key
                    let post = ["uid": key,                           
                        "title": titleField.text,                    
                        "description": descField.text]    
ref?.child(key!).setValue(post)

当我想检索这些数据条目时,目前我正试图通过查看参考点(“任务”)来检索数据条目(在 iOS 中,我的数据库参考如下):

ref = Database.database().reference().child("task")
ref.observe(.childAdded, with: { (snapshot) in                
            print(snapshot)
            guard let dictionary = snapshot.value as? [String : AnyObject]
                else {
                    return

【问题讨论】:

  • 请编辑问题以显示未按照您期望的方式使用这些规则的特定查询。规则和查询总是在一起的。您的查询可能不符合您的规则。
  • @DougStevenson 我对使用数据库还很陌生,所以我将假设“查询”是指我的数据结构如何。我将使用我的数据结构示例来编辑操作
  • 通过查询,他表示您正在使用(尝试)读取/写入数据库的代码。
  • @AndréKool 谢谢,刚刚更新了我如何读/写数据的操作

标签: firebase firebase-realtime-database firebase-security


【解决方案1】:

这里发生了一些事情。

首先作为Doug answered,您的规则必须与您的查询相匹配。

其次,当使用childByAutoId() 时,您正在创建一个随机密钥。相反,您应该使用登录用户的 UID。

第三,从数据库读取时,您必须确保从您放置规则的位置读取。目前,如果没有定义规则,您正在尝试阅读整个列表。 (当没有定义规则时,Firebase 默认为 false)相反,您应该阅读列表的子项。

您还可以查看my answer here 以获得更多解释和相关文档的链接。

【讨论】:

  • 谢谢,你的回答真的很有帮助。我通过将引用指向与当前用户的用户 ID 匹配的节点来解决我的问题,该用户 ID 现在与安全规则匹配。谢谢!
【解决方案2】:

您的规则与您的查询不符。您的查询正在访问名为“task”的节点上的文档,但您的规则正在保护名为“posts”的节点。您应该编辑您的规则以匹配您打算保护的查询。

【讨论】:

  • 如果您查看该问题的最新更新,您会发现还有更多内容。
猜你喜欢
  • 2013-02-08
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多