读取当前用户的数据?

时间:2019-07-15 19:14:33

标签: ios swift firebase firebase-realtime-database firebase-authentication

您好,我想知道如何为当前登录用户读取数据以及如何检索数据。 直到updateName函数的第一个代码在另一个viewController中。函数updateName在另一个ViewController中。 我将数据放在“用户”下,然后在Firebase RealTimeDatabse中有2个键值对,分别称为Firstname = SomeData,LastName = SomeData,如何才能访问当前登录用户的唯一数据。 我更新了代码以称赞为坦率, 问题是它不会将数据读入其中并给出一个空值,我知道为什么,因为由于用户正在创建它,所以用户帐户的uid为空。 那么,当用户创建帐户时,我该如何保存用户名并为其配置文件回叫 你能帮我么 感谢您的提前帮助

        let nameDB = Database.database().reference().child("User")
    let nameDictionary = ["FirstName" : fullName.text!, "LastName" : lastName.text!]   
    let uid = Auth.auth().currentUser?.uid
    Auth.auth().createUser(withEmail: email.text!, password: password1) { (userInformation, someKindOfError) in

            if someKindOfError != nil {
                print(someKindOfError!)
            } else {
                //success

             nameDB.child(uid!).setValue(nameDictionary) {
                    //error 
                    (error, reference) in
                    if error != nil{
                        print(error!)
                    } else  {
                        print("Name saved Sucessful")

                    }
                }
                print("Registration successful!!")

            }
        }

   //Different viewController
   func updateName() {

    let userID = Auth.auth().currentUser?.uid

    let fullName = Database.database().reference().child("User").child(userID!)



    fullName.observeSingleEvent(of: .value) { (snapShot) in

       print("Enter snapShot")
        if let snapShotValue = snapShot.value as? [String : String]{

            print("Entering to grab the data")
            let first = snapShotValue["FirstName"] //as? String
            let last =  snapShotValue["LastName"] //as? String
            print(first, last)

            self.fullName.text = "\(first) \(last)"

        }
    }

数据结构:

 {
"User" : {
"fTKigbhqdVfis9SFk7ofsq1k9Gw1" : {
  "FirstName" : "Alfred",
  "LastName" : "case"
}
 }

 }

1 个答案:

答案 0 :(得分:0)

您正在为这样的用户编写数据:

let nameDB = Database.database().reference().child("User")
nameDB.childByAutoId().setValue(nameDictionary)

然后您将其阅读:

let fullName = Database.database().reference().child("User").child(userID!)
fullName.observeSingleEvent(of: .value) { (snapShot
  ...

如果仔细看,路径是不同的。您写到/User/$autoId并从/User/$uid中读取。用户的UID与childByAutoId生成的ID不同。

您可能想写信给:

let nameDB = Database.database().reference().child("User")
let uid = Auth.auth().currentUser?.uid
nameDB.child(uid).setValue(nameDictionary)