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
                }