无法实施Firebase规则

时间:2019-07-17 18:21:48

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

我在使用以下数据库规则从客户端(我的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

2 个答案:

答案 0 :(得分:0)

您的规则与您的查询不匹配。您的查询正在访问名为“任务”的节点上的文档,但是您的规则正在保护名为“帖子”的节点。您应编辑规则以匹配要保护的查询。

答案 1 :(得分:0)

这里发生了几件事。

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

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

第三,从数据库中读取数据时,必须确保从放置规则的位置进行读取。当前,如果未定义任何规则,则您正在尝试阅读整个列表。 (当未定义任何规则时,Firebase默认设置为false),而是应阅读列表的子项。

您还可以查看my answer here,以获取更多说明和指向相关文档的链接。