正在处理一些FirAuth问题,但由于某些原因,我无法确定如何检查用户建议的电子邮件地址是否已被占用。我试过打电话给.fetchProvidersForEmail,就像前一段时间其他问题中所建议的那样,但不管什么原因,它都不起作用。另外,当涉及到完成处理程序时,我是非常环保的,所以任何有建设性的批评都会受到欢迎。因此,现在,我的代码中与此相关的部分是:

import UIKit
import Firebase
class LoginViewController: UIViewController {
var reply : Bool = true
@IBOutlet weak var emailTxt: UITextField!

@IBAction func nextScreen(sender: UIButton) {
print(emailCheck(emailTxt.text!))
}

 func emailCheck(input : String)->Bool{
    let pullEmails = FIRAuth.auth()!.fetchProvidersForEmail(input, completion:{
        result,error in
        var decision : Bool = true
        if error == "nil" {
            print(error)
            self.reply = true
        }else{
            print(error)
            self.reply = false
        }
    })
    return reply
}
}

所以,这会发生什么,回复总是打印,可能是因为我在顶部明确定义了它。不管是哪种方式,完成处理程序都几乎没有在它的值true之前等待实际完成。我已经尝试过如何使用它们,以及returns,但是我想知道是否有一个简单的错误可以解决这个问题。谢谢大家!

最佳答案

我尝试了.fetchProviders(forEmail: String, completion: FIRProviderQueryCallback?),如果在FireBase中提供了有效的电子邮件地址,它将在[String]?中返回其密码。如果有密码,您知道有一个活动帐户:

   FIRAuth.auth()?.fetchProviders(forEmail: email, completion: { (stringArray, error) in
            if error != nil {
                print(error!)
            } else {
                if stringArray == nil {
                    print("No password. No active account")
                } else {
                    print("There is an active account")
                }
            }
        })

这是一个小黑客,但我没有发现更好的。披露:我只使用密码验证
如果您正在创建一个用户或登录,您将收到来自回调的.emailAlreadyInUse错误。以下是Auth抛出的所有可能的errors列表。

09-10 06:56
查看更多