将电子邮件更新到 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 值会出错

Firebase不会接收电子邮件/密码身份验证

如何从 Firebase 更新电子邮件? UpdateEmail 方法已被弃用

如何将电子邮件地址添加到 firebase kotlin? [复制]

使用 Firebase 函数将实时数据库中的数据发送到电子邮件