Firebase - 获取用户时权限被拒绝

时间:2016-10-27 17:47:02

标签: ios firebase firebase-realtime-database swift3

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

  

取消错误错误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"
  }
 }
}
}

1 个答案:

答案 0 :(得分:7)

根据您当前的安全规则,您只允许当前用户访问其自己的节点。

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

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