如何检查电子邮件地址是否已在使用 Firebase
How To Check If An Email Address Is Already In Use Firebase
正在处理一些 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
,但我想知道我在这里犯的一个简单错误是否可以解决这个问题。谢谢大家!
我花了很长时间才找到这个答案,但就在这里。
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,即 " "
而不是 ""
,您将得到某种错误代码。我正在寻找的两个最重要的 return 代码是 17009
和 17011
。这是因为如果 17009
被 returned(表示密码错误)那么我们就知道已经有一个电子邮件地址与该建议地址相关联,因此用户不应该能够注册换一个新的。下一个代码 17011
非常简单。这意味着没有使用该给定电子邮件地址的用户在文件中,这十个允许用户声明它。我用这个调用这个函数:
mailCheck(emailTxt.text!) { isValid in
if isValid {
print("valid")
} else {
print("Invalid!")
}
然后管理来自它的boolean
。希望这对处于相同情况的其他人有所帮助!
我尝试了 .fetchProviders(forEmail: String, completion: FIRProviderQueryCallback?)
,如果在 Firebase 中提供了有效的电子邮件地址,它将 return 在 [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 的列表
正在处理一些 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
,但我想知道我在这里犯的一个简单错误是否可以解决这个问题。谢谢大家!
我花了很长时间才找到这个答案,但就在这里。
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,即 " "
而不是 ""
,您将得到某种错误代码。我正在寻找的两个最重要的 return 代码是 17009
和 17011
。这是因为如果 17009
被 returned(表示密码错误)那么我们就知道已经有一个电子邮件地址与该建议地址相关联,因此用户不应该能够注册换一个新的。下一个代码 17011
非常简单。这意味着没有使用该给定电子邮件地址的用户在文件中,这十个允许用户声明它。我用这个调用这个函数:
mailCheck(emailTxt.text!) { isValid in
if isValid {
print("valid")
} else {
print("Invalid!")
}
然后管理来自它的boolean
。希望这对处于相同情况的其他人有所帮助!
我尝试了 .fetchProviders(forEmail: String, completion: FIRProviderQueryCallback?)
,如果在 Firebase 中提供了有效的电子邮件地址,它将 return 在 [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
.