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