Ios 更新电子邮件至firebase

Ios 更新电子邮件至firebase,ios,swift,firebase,Ios,Swift,Firebase,它在我的控制台中打印更改,但没有任何更改,用户的电子邮件保持不变。占位符文本恢复为原始电子邮件,该特定用户的电子邮件my Firebase数据库也保持不变。我想让用户可以选择更改其个人资料的任何部分,包括电子邮件、密码、位置以及首次注册时存储的其他值。为了做到这一点,我必须让他们注销并辞职吗?这似乎是一种糟糕的用户体验 class SettingsViewController: UIViewController { @IBOutlet weak var email: UITextField!

它在我的控制台中打印更改,但没有任何更改,用户的电子邮件保持不变。占位符文本恢复为原始电子邮件,该特定用户的电子邮件my Firebase数据库也保持不变。我想让用户可以选择更改其个人资料的任何部分,包括电子邮件、密码、位置以及首次注册时存储的其他值。为了做到这一点,我必须让他们注销并辞职吗?这似乎是一种糟糕的用户体验

class SettingsViewController: UIViewController {

@IBOutlet weak var email: UITextField!
@IBOutlet weak var password: UITextField!
@IBOutlet weak var location: UITextField!
@IBOutlet weak var updateEmail: UIButton!
@IBOutlet weak var updateLocation: UIButton!
@IBAction func updateEmailAction(_ sender: Any) {

    let currentUser = Auth.auth().currentUser

    currentUser?.updateEmail(to: email.text!) { error in
        if let error = error {
            print(error)  
        } else {
            print("CHANGED") 
        }
    }
}

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

override func viewDidLoad() {
    super.viewDidLoad()

    let userRef = dataBaseRef.child("users/\(Auth.auth().currentUser!.uid)")

    userRef.observe(.value, with: { (snapshot) in

        let user = Users(snapshot: snapshot)

        if let email = user.email{
            self.email.placeholder = email  
        }

        if let location = user.location{
            self.location.placeholder = location
        }
    }  
)}

.updateEmail函数更新用户在Firebase凭据中的电子邮件,与/users节点中存储的内容无关

如果您在那里保存了一封重复的电子邮件,则需要在.updateEmail函数成功时将该数据写入/users/uid节点。i、 e./users节点是您创建的,不由Firebase维护

@IBAction func updateEmailAction(_ sender: Any) {

   let currentUser = Auth.auth().currentUser

   currentUser?.updateEmail(to: email.text!) { error in
       if let error = error {
           print(error)  
       } else {
           print("CHANGED")
           let uid = Auth.auth().currentUser!.uid
           let thisUserRef = fbRef.child("users").child(uid)
           let thisUserEmailRef = thisUserRef.child("email")
           thisUserEmailRef.setValue(email.text!) 
       }
   }
}

可能身份验证电子邮件的更改独立于快照中的电子邮件。即使您正在更改身份验证电子邮件,您也不会调用以更改数据库中的电子邮件子项,快照将从该子项进行查看,但是快照仅用于设置占位符文本。updateEmailAction函数应该调用以直接更改到数据库中,不是吗?我认为您只是在更改用户用于登录的电子邮件。我不知道您的数据结构是什么样子,但似乎应该有一个dataBaseRef.child(“email”).setValue(email.text)来更改数据库本身中的字典值