Ноль при получении отображаемого имени пользователя Firebase - PullRequest
0 голосов
/ 29 октября 2018

Я создал функцию регистрации / входа для приложения.

Вот где я создаю пользователя:

Auth.auth().createUser(withEmail: userEmail, password: userPassword) { (user, error) in

    if error == nil {
        print("You have successfully signed up")

        //add display name to this user
        let user = Auth.auth().currentUser
        if let user = user {
            let changeRequest = user.createProfileChangeRequest()
            changeRequest.displayName = userUsername
            changeRequest.commitChanges { error in
            if error != nil {
                print("Error adding display name")
            } else {
                // Profile updated.
            }
        }
    }

    let uid = (Auth.auth().currentUser?.uid)!
    let newUserRef = self.userRef.child(userUsername)

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "MM-dd-yyy HH:mm:ss"
    let timeZone = TimeZone(identifier: "Eastern Daylight Time")
    dateFormatter.timeZone = timeZone

    newUserRef.setValue(["uid": uid, "email": userEmail, "first": userFirst, "last": userLast, "username": userUsername, "created": String(describing: dateFormatter.string(from: Date()))])
    usernamesRef.updateChildValues([userUsername:uid])
    self.signIn(userEmail: userEmail, userPassword: userPassword)

}

Чтобы войти, я делаю это:

Auth.auth().signIn(withEmail: userEmail, password: userPassword) { (user, error) in

    if error == nil {

        //Print into the console if successfully logged in
        print("You have successfully logged in")

        let vc = self.storyboard?.instantiateViewController(withIdentifier: "LoggedIn")
        self.present(vc!, animated: false, completion: nil)
    } else {

        //Tells the user that there is an error and then gets firebase to tell them the error
        let alertController = UIAlertController(title: "Error", message: error?.localizedDescription, preferredStyle: .alert)

        let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
        alertController.addAction(defaultAction)

        self.present(alertController, animated: true, completion: nil)
    }
}

Здесь я получаю отображаемое имя для текущего пользователя (в отдельном контроллере представления):

ref = Database.database().reference()

let user = Auth.auth().currentUser

//for testing purposes
if ((user) != nil) {
    // User is signed in.
    print("Signed in")
} else {
    // No user is signed in.
    print("Not signed in")
}

let displayName = user?.displayName ?? "nil"

ref.child("users").child(displayName!).observeSingleEvent(of: .value, with: { (snapshot) in
    // Get user value
    let value = snapshot.value as? NSDictionary

    let userFirst = value?["first"] as? String ?? ""
    let userLast = value?["last"] as? String ?? ""
    let userUsername = value?["username"] as? String ?? ""
    let userEmail = value?["email"] as? String ?? ""
    let userCreated = value?["created"] as? String ?? ""
    let userUID = value?["uid"] as? String ?? ""

    self.name.text = "\(userFirst) \(userLast)"
    self.username.text = "\(userUsername)"
    self.email.text = "\(userEmail)"
    self.created.text = "\(userCreated)"
    self.uid.text = "\(userUID)"

}){ (error) in
    print(error.localizedDescription)
}

Случай 1: При создании нового пользователя с помощью экрана регистрации он создает пользователя, затем регистрирует пользователя, затем меняет сцены, чтобы попытаться получить информацию из введенной пожарной базы. Вся информация вводится правильно, отображается в базе данных, но не возвращается на сцену.

Случай 2: После того, как пользователь уже создан, используя экран входа, он входит в систему надлежащим образом, меняет сцены и корректно извлекает всю запрашиваемую информацию.

Почему это так? Почему они не извлекаются после того, как пользователь создан, затем вошел в систему, а также когда пользователь уже создан и вошел в систему.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...