获取当前用户

时间:2017-10-07 18:40:03

标签: swift firebase firebase-realtime-database

我想显示当前用户发布的帖子列表。 这就是我得到的。我需要从用户结构中获取 uid 。然后我需要检查用户结构中的uid 和posts / uid相同。这就是我不知道该怎么做的原因,因为我不知道你怎么能进入一个有id的帖子,例如:“-Kvs50Et17ilfzdgdhcK”。它需要以某种方式检查已经放置的所有帖子,而不是检查来自用户的 uid与帖子的uid相同。请帮忙!

    var Gametext: String = ""
    var Consoletext: String = ""

    var dataBaseRef: DatabaseReference! {
        return Database.database().reference()
    }

    var post: Post! {
        didSet {

            let postsRef = dataBaseRef.child("posts/\(Auth.auth().currentUser!.uid)")
        let userQuery = postsRef.queryOrdered(byChild: "uid").queryEqual(toValue: Auth.auth().currentUser!.uid)
        userQuery.observe(.childAdded, with: { (snapshot) in
            print(snapshot.childSnapshot(forPath: "Game").value as? String)
            print(snapshot.childSnapshot(forPath: "Console").value as? String)
        }) { (error) in
            print(error.localizedDescription)
        }


        }
    }

这是我的帖子结构:

{
  "posts" : {
    "-Kvs50Et17ilfzdgdhcK" : {
      "Console" : "Xbox One",
      "ExtraInfo" : "Test",
      "Game" : "test",
      "Gamertag" : "test1244@gamertag",
      "photoURL" : "",
      "postDate" : 1.5074008811834E9,
      "postId" : "C835A03A-9BAF-423E-87F0-60139DA893EB",
      "uid" : "7E4vEew5RbMsWmSMijZxT4TzxHh1",
      "username" : "dani Kemper"
    }
  },

这是我的用户结构:

    "users" : {
        "7E4vEew5RbMsWmSMijZxT4TzxHh1" : {
          "Console" : "Xbox One",
          "Gamertag" : "test1244@gamertag",
          "country" : "Antigua & Barbuda",
          "email" : "dani@gmail.com",
          "photoURL" : "",
          "uid" : "7E4vEew5RbMsWmSMijZxT4TzxHh1",
          "username" : "dani Kemper"
        }
   }
}

1 个答案:

答案 0 :(得分:0)

现在您正在阅读数据库中的/posts/7E4vEew5RbMsWmSMijZxT4TzxHh1。这不是用户帖子的位置,因此使用没有数据的快照调用完成处理程序。由于您尝试从中读取数据,因此代码失败。

您需要使用查询检查每个帖子的uid属性来从数据库中读取数据:

let postsRef = dataBaseRef.child("posts/\(Auth.auth().currentUser!.uid)")
let userQuery = postsRef.queryOrder(byChild: "uid").queryEqual(toValue: Auth.auth().currentUser!.uid)
userQuery.observe(.childAdded, with: { (snapshot) in
    print(snapshot.childSnapshot(forPath: "Game").value as? String)
    print(snapshot.childSnapshot(forPath: "Console").value as? String)
}) { (error) in
    print(error.localizedDescription)
}

我建议您阅读working with lists of data。花了几个小时阅读和研究这些代码示例,将节省大量的时间和问题。