如何检查电子邮件地址是不是已在使用 Firebase

Posted

技术标签:

【中文标题】如何检查电子邮件地址是不是已在使用 Firebase【英文标题】:How To Check If An Email Address Is Already In Use Firebase如何检查电子邮件地址是否已在使用 Firebase 【发布时间】:2016-07-30 17:43:58 【问题描述】:

正在处理一些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 值之前等待实际完成。我试图弄清楚如何使用它们以及AsyncTasks,但我想知道我在这里犯的一个简单错误是否可以解决这个问题。谢谢大家!

【问题讨论】:

【参考方案1】:

我尝试了.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 的列表。

【讨论】:

【参考方案2】:

这个答案花了我很长时间才找到,但就是这样。

func emailCheck(input: String, callback: (isValid: Bool) -> Void) 
    FIRAuth.auth()?.signInWithEmail(input, password: " ")  (user, error) in
        var canRegister = false

        if error != nil 
            if (error?.code == 17009) 
                canRegister = false
             else if(error?.code == 17011) 
                //email doesn't exist
                canRegister = true
            
        

        callback(isValid: canRegister)
    

这段代码有效的原因很简单。本质上,如果您将非空密码传递给 Firebase,即 " " 而不是 "",您将得到某种错误代码。我正在寻找的两个最重要的返回码是1700917011。这是因为如果返回17009(表示密码错误),那么我们知道已经有一个与该提议地址关联的电子邮件地址,因此用户不应该注册新的。下一个代码17011 非常简单。这意味着没有使用该给定电子邮件地址的用户存档,这十个允许用户声明它。我用这个来调用这个函数:

mailCheck(emailTxt.text!)  isValid in
                if isValid 
                    print("valid")
                 else 
                    print("Invalid!")
                

然后管理来自它的boolean。希望这对处于相同情况的其他人有所帮助!

【讨论】:

感谢您发布此消息!这很丑陋,但需要有一种方法来完成这个/不知何故/。感谢您的分享!

以上是关于如何检查电子邮件地址是不是已在使用 Firebase的主要内容,如果未能解决你的问题,请参考以下文章

使用 MailChimp API v3.0 检查电子邮件地址是不是已在列表中,而无需订阅电子邮件地址

如何检查输入的电子邮件 ID 是不是已在 Paypal 中注册?

Firebase Auth 和 Swift:检查电子邮件是不是已在数据库中

如何使用 PHP 检查电子邮件地址是不是真实或有效

如何检查邮件地址是不是存在?

如何检查用户 JID 是不是已在 XMPPFrameWork 中使用