将电子邮件更新到 firebase
Posted
技术标签:
【中文标题】将电子邮件更新到 firebase【英文标题】:Updating Email to firebase 【发布时间】:2018-01-07 01:46:16 【问题描述】:它在我的控制台中打印 CHANGED,但没有任何变化,用户的电子邮件保持不变。占位符文本恢复为原始电子邮件,我的 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
)
【问题讨论】:
也许身份验证电子邮件的更改独立于您快照中的电子邮件。即使您正在更改身份验证电子邮件,您也不会调用来更改数据库中快照来自的电子邮件子项 我会调查的,但是快照仅用于设置占位符文本。应该调用 updateEmailAction 函数来更改数据库,不是吗? 我认为您只是在更改用户用于登录的电子邮件。我不知道您的数据结构是什么样的,但似乎应该有一个 dataBaseRef.child("email").setValue(email.text) 来更改数据库本身中的字典值 【参考方案1】:.updateEmail 函数会更新用户在其 Firebase 凭据中的电子邮件,并且与 /users 节点中存储的内容无关。
如果您在其中保留了重复的电子邮件,则需要在 .updateEmail 函数成功时将该数据写入 /users/uid 节点。即 /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!)
【讨论】:
以上是关于将电子邮件更新到 firebase的主要内容,如果未能解决你的问题,请参考以下文章
更改 Firebase 电子邮件不会更新 providerData
如何从 Firebase 更新电子邮件? UpdateEmail 方法已被弃用