【问题标题】:Firebase email verification doesn't verify accountFirebase 电子邮件验证不验证帐户
【发布时间】:2017-02-23 10:54:23
【问题描述】:

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

FIRAuth.auth()?.addStateDidChangeListener({ (auth, user) in
            if (auth.currentUser?.isEmailVerified)!{
                let mainStoryboard: UIStoryboard = UIStoryboard(name:"Main",bundle:nil)

                let NewPostViewController: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "NewPostViewController")

                //Send the user to the LoginViewController
                self.present(NewPostViewController, animated: true, completion: nil)
            }else{
                let alertVC = UIAlertController(title: "Error", message: "Sorry. Your email address has not yet been verified. Do you want us to send another verification email to \(self.currentUser.generalDetails.email).", preferredStyle: .alert)
                let alertActionOkay = UIAlertAction(title: "Okay", style: .default) {
                    (_) in
                    FIRAuth.auth()?.currentUser?.sendEmailVerification(completion: nil)

                }
                let alertActionCancel = UIAlertAction(title: "Cancel", style: .default, handler: nil)
                alertVC.addAction(alertActionOkay)
                alertVC.addAction(alertActionCancel)
                self.present(alertVC, animated: true, completion: nil)
            }
        })

【问题讨论】:

  • 验证用户后是否要重新加载当前用户?
  • 如何重新加载用户?终止应用程序不会成功吗?如果它正在重新加载我的声誉,那么为什么它没有检测到用户已通过验证。
  • 电子邮件验证属性仅在用户登录时重新加载。如果我没记错的话,您可以re-authenticate 获取更新后的值,但reloadWithCompletion 听起来也很有希望。
  • 谢谢。得到它的工作:) 我什至没有想到必须做这样的事情。我认为 Firebase 会为用户添加一些标记,否则会完全不同,因为文档对此非常糟糕。即使我尝试自己找到这些价值观,如果我去文档,我也找不到它们:D 每天都在学习新事物。

标签: ios swift firebase firebase-authentication


【解决方案1】:

我的做法是添加NSNotification.Name.UIApplicationDidBecomeActive,因为用户必须离开应用程序才能验证电子邮件:

NotificationCenter.default.addObserver(self,selector:#selector(APEmailVerificationViewController.checkEmailVerificationState),name:NSNotification.Name.UIApplicationDidBecomeActive, object:  nil)

不要忘记删除viewDidDisappear 中的通知。这是APEmailVerificationViewController.checkEmailVerificationState 函数:

FIRAuth.auth()?.currentUser?.reload(completion: { [unowned self] (error) in
        if error != nil {
            print(error!.localizedDescription)
            return
        }
        if !FIRAuth.auth()!.currentUser!.isEmailVerified {
            return
        }

        /**
            Great! We go the playground of the app.
         */
        UIAlertView(title: "Hooray", message: "You've successfully verified your email", delegate: nil, cancelButtonTitle: "Ok").show()
        APIntent.gotoPlayground()
    })

希望对你有帮助!

【讨论】:

    【解决方案2】:

    我实现这个功能的方法是添加一个NSTimer,其时间间隔将检查用户是否已通过验证,然后在验证完成后终止计时器。

    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)
    
            }
        })
    
    }
    

    【讨论】:

    • 哇......它真的很有效,很棒的解决方案:)。但是,我是否应该将值保存到某个地方,这样我就不必每次单击某个按钮时都运行该函数?无论如何,非常感谢你:)
    • 没有reloadFIRAuth.auth()!.currentUser!.isEmailVerified 会为你处理这些
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多