【问题标题】:Firebase - permission denied when fetching usersFirebase - 获取用户时权限被拒绝
【发布时间】:2017-03-10 12:31:29
【问题描述】:

我正在尝试使用此代码从 Firebase 数据库中获取用户,但出现此错误

取消错误 Error Domain=com.firebase Code=1 "Permission Denied" UserInfo={NSLocalizedDescription=Permission Denied}

我的规则应该如何设置?

代码如下:

FIRDatabase.database().reference().child("users").observe(.childAdded, with: { (snapshot) in

        print("snapshot \(snapshot)")
        //all users right here n shyt
        if let dictionary = snapshot.value as? [String: AnyObject] {
            let user = User()

            //class properties have to match up with firebase dictionary names
            user.setValuesForKeys(dictionary)
            self.users.append(user)


            DispatchQueue.main.async {
                self.messageTable.reloadData()
            }
        }
            print(snapshot)

        }, withCancel: { (error) in
            print("cancel error \(error)")
    })

这是我在 Firebase 中的规则:

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

【问题讨论】:

  • 您肯定希望将代码放入withCancel 以检测读取是否被取消。见stackoverflow.com/documentation/firebase/5548/…
  • 同时给出最小的 JSON 树结构。
  • 我按照弗兰克说的去做,然后返回错误,说“取消错误 Error Domain=com.firebase Code=1 "Permission Denied" UserInfo={NSLocalizedDescription=Permission Denied}"

标签: ios firebase firebase-realtime-database swift3


【解决方案1】:

鉴于您当前的安全规则,您仅授予当前用户访问其自己节点的权限。

如果这是您想要的动态,请尝试创建另一个父节点,其中包含您想与其他用户共享的详细信息。

users:{
 userID1 : {../*PERSONAL DETAILS*/},
 userID2 : {../*PERSONAL DETAILS*/},
 userID3 : {../*PERSONAL DETAILS*/},
 userID4 : {../*PERSONAL DETAILS*/},
 userID5 : {../*PERSONAL DETAILS*/},
 ....
  },
USERS_INFO: {
  userID1 : {../*Details to share*/},
  userID2 : {../*Details to share*/},
  userID3 : {../*Details to share*/},
  userID4 : {../*Details to share*/},
  userID5 : {../*Details to share*/},
  ....
  }

并将您的安全规则更新为:-

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

查询如下:-

 FIRDatabase.database().reference().child("USERS_INFO").observe(.childAdded, with: { (snapshot) in

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-15
    • 2017-12-26
    • 1970-01-01
    相关资源
    最近更新 更多