Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
保存用户';Firebase中的s名称-Swift_Swift_Firebase_Firebase Authentication - Fatal编程技术网

保存用户';Firebase中的s名称-Swift

保存用户';Firebase中的s名称-Swift,swift,firebase,firebase-authentication,Swift,Firebase,Firebase Authentication,我的注册表中有三个文本字段。Firebase注册方法使用用户的电子邮件id和密码创建新用户。但是我还想根据用户输入的内容保存用户名 我现在的代码是 @IBAction func registerPressed(_ sender: Any) { SVProgressHUD.show(withStatus: "Setting you up") dismissUIElements(value: false) let currentUserName = userName.te

我的注册表中有三个文本字段。Firebase注册方法使用用户的电子邮件id和密码创建新用户。但是我还想根据用户输入的内容保存用户名

我现在的代码是

@IBAction func registerPressed(_ sender: Any) {

    SVProgressHUD.show(withStatus: "Setting you up")
    dismissUIElements(value: false)

    let currentUserName = userName.text
    if currentUserName?.isEmpty == false {
        FIRAuth.auth()?.createUser(withEmail: emailTextField.text!, password: passwordTextField.text!, completion: { (user, error) in

            if error != nil {
                print(error!)

                SVProgressHUD.dismiss()

                self.dismissUIElements(value: true)

            } else {
                print("Registration Successful!")

                SVProgressHUD.dismiss()
                self.dismissUIElements(value: true)

                self.performSegue(withIdentifier: "goToSelectionFromRegister", sender: self)
            }
        })
    }
    else {
        SVProgressHUD.dismiss()

        SVProgressHUD.showError(withStatus: "Please enter your name!")
        SVProgressHUD.dismiss(withDelay: 1)
        self.dismissUIElements(value: true)
    }

}

您将创建一个存储该信息的新数据表。它不会在create user函数中完成

// create a reference to  the DB
ref = Database.database().reference(fromURL: "https://your-project-name.firebaseio.com/")
//variables to store data
var myID : String?
var myName : String?
var myNumber : String?
var myEmail : String?

// creating the save user function
func saveUser(_ completion: @escaping(_ error: Error?) -> Void) {
    if PageDataSource.sharedInstance.crudIsAvailable == true {
        let usersRef = ref.child("users")
        let myUserRef = usersRef.child(id)
        myUserRef.updateChildValues(["User ID": id,
                                     "Name": myName,
                                     "Email": myEmail,
                                     "Phone": .myNumber], withCompletionBlock: { (error, ref) in
                                        if error != nil {
                                            completion(error!)
                                        } else {
                                            completion(nil)
                                        }
        })
    } else {
        completion(NSError(domain: "Unavailable", code: 0, userInfo: nil))
    }
}

// call the method like this to perform the save
func storeUser(completion: @escaping(_ completed: Bool, _ error: NSError?)-> Void) { 
     if let user = Auth.auth().currentUser { 
         myID = user.uid 
         myName = user.displayName 
         myEmail = user.email 
           // etc.,
         completion(true,nil) 
     } else { 
         completion(false,NSError(domain: "No Current User", code: 1, userInfo: nil)) 
     } 
 } 

您需要一个函数来注册用户,然后在Firebase中为该用户创建子级

let databaseRef=//your path to users.     

func registerUser(userUsername userName:String, userEmail email:String, userPassword password: String, userCreationComplete: @escaping (_ status: Bool, _ error: Error?) -> ()) {
    Auth.auth().createUser(withEmail: email, password: password) { (user, error) in
        guard let user = user else {
            userCreationComplete(false, error)
            return
        }

        let userData = ["userName": userName.text] as [String : Any]

        ref.child(user.uid).updateChildValues(userData)

        userCreationComplete(true, nil)

    }
}

然后从
registerPressed()
中调用函数,并向其传递textfield值,但确保其中没有一个值为空。

我必须在createUser的成功块中调用storeUser方法?这是一个合适的位置。