Firebase iOS:createUserWithEmail没有生成userId(uid)

时间:2016-07-05 22:02:08

标签: ios swift firebase firebase-authentication

我是firebase的新手,我正在努力学习如何创建用户。我的问题是,当我通过按钮使用createUserWithEmail完成块时,由于某种原因,不会生成唯一标识符uid。这可以防止我将相关的用户名和密码存储在JSON树中的uid下。我的代码如下(我使用“let databaseRef = FIRDatabase.database()。reference()”)将一个单独的swift文件中的databaseRef定义为全局常量。

@IBAction func createAccount(sender: AnyObject) {

    var username = usernameField.text
    var email = emailField.text
    var password = passwordField.text
    if username != "" && email != "" && password != "" {
        FIRAuth.auth()?.createUserWithEmail(email!, password: password!, completion: { (user, error) in
            databaseRef.child("users/(user.uid)/username").setValue(username)
            databaseRef.child("users/(user.uid)/password").setValue(password)
            databaseRef.child("users/(user.uid)/uid").setValue(user?.uid) 
        })
    } else {
        print("please complete all fields")
    }
}

我知道uid不是由于两个原因而生成的。首先,当我运行上面的代码并输入每个文本字段的值时,应用程序崩溃了。其次,如果我删除处理设置值的代码并将其替换为print(user.uid),则返回值为nil。我错过了什么?我可以理解,uid是创建用户的一个非常重要的部分。

***这是我提出的解决方案

 @IBAction func createAccount(sender: AnyObject) {

    var username = usernameField.text
    var email = emailField.text
    var password = passwordField.text

    if username != "" && email != "" && password != "" {

        FIRAuth.auth()?.createUserWithEmail(email!, password: password!, completion: { (user, error) in

             if let user = FIRAuth.auth()?.currentUser {

                databaseRef.child("users/\(user.uid)/username").setValue(username)
                databaseRef.child("users/\(user.uid)/password").setValue(password)
                databaseRef.child("users/\(user.uid)/email").setValue(email)

                print(user.uid)

            } else {

                print("no user")

            }

        })


    } else {

        print("please complete all fields")

    }

1 个答案:

答案 0 :(得分:2)

有兴趣的人2018年4月4日快速解决方案:

Auth.auth().createUser(withEmail: email, password: password) { (user, error) in
    // guard against errors and optionals
    guard error == nil else { return }
    guard let user = user else { return }
    let userObject = [
        "uid": user.uid,
        "username": username,
        "password": password, // I don't recommend storing passwords like this by the way
        "email": email
        ] as [String:Any]
    databaseRef.child("users").child(user.uid).setValue(userObject)
}