【问题标题】:Updating Email to firebase将电子邮件更新到 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) 来更改数据库本身中的字典值

标签: ios swift firebase


【解决方案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!) 
       }
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 2020-11-22
    • 1970-01-01
    • 2021-06-23
    • 2018-07-09
    • 1970-01-01
    • 2019-11-25
    相关资源
    最近更新 更多