Swift 尝试使用Firebase重新验证用户时出错
因此,我的目标是让用户重新认证,然后能够在认证后更新其密码。所以现在我有一个警报控制器,当点击一个单元格时,它就会出现,警报中有Swift 尝试使用Firebase重新验证用户时出错,swift,firebase,google-cloud-firestore,firebase-authentication,uialertcontroller,Swift,Firebase,Google Cloud Firestore,Firebase Authentication,Uialertcontroller,因此,我的目标是让用户重新认证,然后能够在认证后更新其密码。所以现在我有一个警报控制器,当点击一个单元格时,它就会出现,警报中有textFields,用于重新验证 var reauthEmailTextField = UITextField() var reauthPasswordTextField = UITextField() let credential: AuthCredential = EmailAuthProvider.credenti
textFields
,用于重新验证
var reauthEmailTextField = UITextField()
var reauthPasswordTextField = UITextField()
let credential: AuthCredential = EmailAuthProvider.credential(withEmail: reauthEmailTextField.text ?? "", password: reauthPasswordTextField.text ?? "")
let reauthAlert = UIAlertController(title: "Reauthenticate", message: "In order for you to change your password, you must provide your sign-in credentials again.", preferredStyle: .alert)
let submit = UIAlertAction(title: "Submit", style: .default) { (sub) in
user.reauthenticate(with: credential) { (result, error) in
guard error == nil else {
print("The user couldn't be reauthenticated. Email: \(reauthEmailTextField.text ?? "") Password: \(reauthPasswordTextField.text ?? "")")
return
} ...
reauthAlert.addTextField { (reAuthEmail) in
reauthEmailTextField = reAuthEmail
reAuthEmail.placeholder = "Your Email"
reAuthEmail.clearButtonMode = .whileEditing
}
reauthAlert.addTextField { (reAuthPass) in
reauthPasswordTextField = reAuthPass
reAuthPass.clearButtonMode = .whileEditing
reAuthPass.placeholder = "Your Password"
reAuthPass.isSecureTextEntry = true
}
reauthAlert.addAction(UIAlertAction(title: "Dismiss", style: .cancel))
reauthAlert.addAction(submit)
present(reauthAlert, animated: true, completion: nil)
现在,当用户成功重新验证后,它将取消当前警报,并显示新警报以实际更新用户密码。问题是,重新身份验证过程总是失败,并且永远不会出现第二个警报。print语句会打印出
textFields
中的输入,因此我知道这与textFields
无关。我读了几篇关于重新身份验证的文章,并将我的代码与其他代码进行了比较,我确信我的语法是正确的,所以我真的无法理解这个重新身份验证不起作用的问题。有什么建议吗?在用户有机会在文本字段中输入任何内容之前,您正在创建您的凭证对象:
var reauthEmailTextField = UITextField()
var reauthPasswordTextField = UITextField()
let credential: AuthCredential = EmailAuthProvider.credential(withEmail: reauthEmailTextField.text ?? "", password: reauthPasswordTextField.text ?? "") //<-- Here
出于某种原因,《宣言》的定位引起了这一问题。我决定对该方法进行如下改进:
user.reauthenticate(with: EmailAuthProvider.credential(withEmail: reauthEmailTextField.text ?? "", password: reauthPasswordTextField.text ?? "")) { (result, error) in
guard error == nil else {
print("The user couldn't be reauthenticated. Email: \(reauthEmailTextField.text ?? "") Password: \(reauthPasswordTextField.text ?? "")")
print("\(String(describing: error))")
return
}
这可能不是最干净的方法,但如果鞋子合适,就摇动它。整个过程现在运行正常。重新验证时的错误说明了什么?现在,你没有打印出来——你知道上面写的是什么吗?是说密码无效或者用户没有密码,问题是我每次都用相同的密码登录,所以我不明白它怎么会无效@JNPDX在你发布它时意识到了这一点,并且发布了我自己的答案,哈哈,谢谢@jnpdx
user.reauthenticate(with: EmailAuthProvider.credential(withEmail: reauthEmailTextField.text ?? "", password: reauthPasswordTextField.text ?? "")) { (result, error) in
guard error == nil else {
print("The user couldn't be reauthenticated. Email: \(reauthEmailTextField.text ?? "") Password: \(reauthPasswordTextField.text ?? "")")
print("\(String(describing: error))")
return
}