当前位置: 首页 > 知识库问答 >
问题:

Firebase电子邮件验证总是返回假用户未验证。ios

帅煌
2023-03-14

我正在实施firebase电子邮件验证,但是当用户收到电子邮件时,它会重定向到应用程序,这很好。当我尝试使用经过验证的电子邮件Auth.auth().currentUser?登录时。isEmailVerified 始终返回 false。以下是我的代码

class ViewController: UIViewController {

@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var signInBtn: UIButton!
var link: String!

override func viewDidLoad() {
    super.viewDidLoad()
    if let link = UserDefaults.standard.value(forKey: "Link") as? String{
        self.link = link
        signInBtn.isEnabled = true
    }
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    self.view.endEditing(true)
}

@IBAction func didTapSignInWithEmailLink(_ sender: AnyObject) {
    if let email = self.emailTextField.text {
        Auth.auth().signIn(withEmail: email, link: self.link) { (user, error) in
            if let error = error {
                print("\(error.localizedDescription)")
                return
            }
        }
    } else {
        print("Email can't be empty")
    }

    print(Auth.auth().currentUser?.email)
    if Auth.auth().currentUser?.isEmailVerified == true {
        print("User verified")
    } else {
        print("User not verified")
    }

}
@IBAction func didTapSendSignInLink(_ sender: AnyObject) {
    if let email = emailTextField.text {
        let actionCodeSettings = ActionCodeSettings()
        actionCodeSettings.url = URL(string: "https://example.firebaseapp.com")

        // The sign-in operation has to always be completed in the app.
        actionCodeSettings.handleCodeInApp = true
        actionCodeSettings.setIOSBundleID(Bundle.main.bundleIdentifier!)
        actionCodeSettings.setAndroidPackageName("com.example.android",
                                                 installIfNotAvailable: false, minimumVersion: "12")
        Auth.auth().sendSignInLink(toEmail: email, actionCodeSettings: actionCodeSettings) { error in
            if let error = error {
                print("\(error.localizedDescription)")
                return
            }
            print("Check your email for link")
        }
    } else {
        print("Email cant be empty")
    }
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}

共有1个答案

盖高畅
2023-03-14

我找到了重新加载用户所需的解决方案,这将更新当前用户状态。调用Auth.Auth.currentUser。在didTapSignInWithEmailLink按钮函数中重新加载:

Auth.auth().currentUser?.reload(completion: { (error) in
            if error == nil{
                if let email = self.emailTextField.text {
                    Auth.auth().signIn(withEmail: email, link: self.link) { (user, error) in
                        if let error = error {
                            print("\(error.localizedDescription)")
                            return
                        }
                    }
                } else {
                    print("Email can't be empty")
                }

                print(Auth.auth().currentUser?.email)
                if Auth.auth().currentUser?.isEmailVerified == true {
                    print("User verified")
                } else {
                    print("User not verified")
                }
            } else {
                print(error?.localizedDescription)
            }
        })
 类似资料:
  • 正如标题中所说,无论我如何尝试登录,< code>emailVerified字段总是为假。这是故意的吗?到目前为止,我已经通读了整个firebase文档,似乎找不到任何关于这方面的信息。只是为了确保:我已经尝试了4个不同的验证帐户,结果总是一样的。知道是什么导致了这种行为吗?

  • 问题内容: 我检查了用户是否通过电子邮件验证。但是,无论我发送并确认了多少电子邮件,验证状态仍为。检查时我做错什么了吗? 问题答案: 我如何实现此功能的方法是添加一个 带有时间间隔的,它将检查用户是否已通过验证,然后在完成验证后终止计时器。 检查您当前用户状态的功能:

  • 我检查了用户是否通过电子邮件进行验证。但是,无论我发送并确认了多少封电子邮件,验证状态仍然是。我在检查时是否做错了什么?

  • 我正在提示我的应用程序用户提供电子邮件凭据。 在用户插入电子邮件并通过后,我想验证该帐户。 我正在使用javax。邮政有没有办法验证帐户?只确保凭据确实有效——否则我想显示一个无效用户并传递消息。 也许是某种表演方式: 并在不发送任何内容的情况下检查身份验证异常。

  • 我正在使用Firebase的方法来验证电子邮件。以下是代码: 这里,< code>else代码应该只在电子邮件未经验证时运行。但是,即使在我验证了电子邮件并重新开始活动之后,< code>if语句仍不为< code>true,电子邮件将再次发送。

  • 嗨,伙计们,我正在尝试在我的应用程序中进行自动登录,但在登录完成之前,我想知道用户是否验证了他的电子邮件或否。 问题是:即使我验证了我的帐户,代码也看不到这个并说是假的。 这是我的密码。 这条线总是假的,即使我验证了我的帐户。