Swift Auth.Auth().currentUser?.reload()不';t刷新currentUser.isEmailVerified

Swift Auth.Auth().currentUser?.reload()不';t刷新currentUser.isEmailVerified,swift,firebase,firebase-authentication,Swift,Firebase,Firebase Authentication,我正在尝试使用Firebase实现电子邮件验证。我已成功创建重定向到我的应用程序的动态链接。我也在网上测试了这个链接。它工作得很好,可以验证电子邮件。但是,验证电子邮件上的链接将我重定向到我的应用程序Auth.Auth()。currentUser.isEmailVerified仍然为我提供false,即使我事先运行了Auth.Auth().currentUser?.reload()命令 有什么帮助吗?您可以设置如下计时器: var verificationTimer : Timer = Time

我正在尝试使用Firebase实现电子邮件验证。我已成功创建重定向到我的应用程序的动态链接。我也在网上测试了这个链接。它工作得很好,可以验证电子邮件。但是,验证电子邮件上的链接将我重定向到我的应用程序Auth.Auth()。currentUser.isEmailVerified仍然为我提供false,即使我事先运行了Auth.Auth().currentUser?.reload()命令


有什么帮助吗?

您可以设置如下计时器:

var verificationTimer : Timer = Timer()    // Timer's  Global declaration

self.verificationTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(LoginViewController.checkIfTheEmailIsVerified) , userInfo: nil, repeats: true)
然后使用此功能反复检查用户的当前状态:

func checkIfTheEmailIsVerified(){

    FIRAuth.auth()?.currentUser?.reload(completion: { (err) in
        if err == nil{

            if FIRAuth.auth()!.currentUser!.isEmailVerified{

                let feedVCScene = self.navigationController?.storyboard?.instantiateViewController(withIdentifier: "ViewControllerVC_ID") as! ViewController
                self.verificationTimer.invalidate()     //Kill the timer
                self.navigationController?.pushViewController(feedVCScene, animated: true)
                // Segueing to the next view(i prefer the instantiation method).
            } else {

                print("It aint verified yet")

            }
        } else {

            print(err?.localizedDescription)

        }
    })

}
希望这有帮助:)

来源:

.reload()
是异步的,因此您可以尝试使用
检查
isEmailVerified
。然后

Auth.auth().currentUser?.reload()
  .then(() => console.log(Auth.auth().currentUser.isEmailVerified)

在Kotlin AndroidStudio中,我使用了一个按钮“验证电子邮件!”

类中:
private var b=false//验证电子邮件
按钮

btnVerify.setOnClickListener{
            verifyEmail()
        }
然后


b是电子邮件验证状态。只有电子邮件经过验证,它才会为“真”。注意!“reload()”是异步的,“b”需要很短的时间才能得到“true”。对我来说,这不到半秒钟。

令人惊讶的是,它居然奏效了。但是你能解释一下为什么它可以与重复计时器一起工作,而不能与用户的一次重新加载一起工作吗?现在它不工作了。我不知道发生了什么,你想经常检查电子邮件是否经过验证。这很奇怪,你能在代码处尝试断点来检查验证,看看它是否被调用吗?它调用函数来检查电子邮件是否被验证。但是,我让它迭代1分钟,即60次迭代,仍然不起作用。在应用操作代码后,在相应的用户上调用
reload
,应该会将用户上的emailVerified更新为true。如果没有发生这种情况,您需要向Firebase支持部门提交一份错误报告。@bojeil,“操作代码”是什么意思?它是通过链接发送的代码。它通过
oobCode=actionCode
附加到链接。您可以解析该代码并将其传递给auth.applyActionCode进行兑换。
private fun verifyEmail(){
        val mAuth = FirebaseAuth.getInstance()
        mAuth.currentUser?.reload()?.addOnCompleteListener {
            b = mAuth.currentUser!!.isEmailVerified
            Log.d("VERI","state: $b")
            if(b){
                btnVerify.visibility = View.GONE
                yuorButton.visibility = View.VISIBLE //optional
            }else{
                Toast.makeText(applicationContext,"your email not verified", Toast.LENGTH_SHORT).show()
            }
        }
}