[英]How to check if an email address is already in use in Firebase on iOS?
我正在为我的iOS应用程序使用Firebase身份验证。 现在,我要检查输入的电子邮件地址是否可用。 我发现我必须为此使用createUserWithEmailAndPassword
。 但是问题是我不想传递密码。 我只想使用电子邮件进行检查。 我怎样才能做到这一点?
以下是您可能正在寻找的Firebase函数的结构(Swift 4):
Auth.auth().fetchProviders(forEmail: emailAddress, completion: {
(providers, error) in
if let error = error {
print(error.localizedDescription)
} else if let providers = providers {
print(providers)
}
})
如果电子邮件地址已经注册给用户,您将获得使用该电子邮件地址的提供商的列表。 否则,提供者列表将为空,因此未注册电子邮件地址。
Firebase身份验证中具有电子邮件地址的任何用户帐户都可以进行验证,而不必是电子邮件+密码帐户。 要验证用户的电子邮件地址,请致电user.sendEmailVerification()
。
如果要在注册用户之前检查电子邮件地址是否已在使用中,则Firebase Admin SDK提供了一种通过用户的电子邮件地址查找用户的方法: admin.auth().getUserByEmail(email)
。 此方法需要管理权限,并且(像所有Admin SDK一样)应仅在受信任的环境中运行-通常是您控制的服务器或Firebase的Cloud Functions。
最后要注意:请注意,即使您在注册之前检查电子邮件地址是否可用,在您调用createUserWithEmailAndPassword()
时,另一个用户也可能已声明该电子邮件地址。 因此,正如Jen所说:如果电子邮件地址已被使用,您还需要处理createUserWithEmailAndPassword()
引发的错误。
您需要使用fetchProvidersForEmail:completion: https ://firebase.google.com/docs/reference/ios/firebaseauth/api/reference/Classes/FIRAuth#-fetchprovidersforemailcompletion
它将返回与该电子邮件关联的提供商ID列表。 如果列表中显示“密码”,则该电子邮件已经存在一个电子邮件/密码帐户,则可以显示登录页面。
不幸的是,您无法使用Firebase做到这一点。 电子邮件帐户还需要密码。
如果您不希望用户输入密码,则可以使用其他帐户选项,例如Facebook,Google,Twitter等。
您只需在用户在firebaseDB的父“用户”中注册时创建一个引用,这些父母的电子邮件ID已在firebase应用程序中注册为“ email”,并在检查电子邮件是否存在时运行以下查询调用
let databaseReff = Database.database().reference().child("users")
databaseReff.queryOrdered(byChild: "email").queryEqual(toValue: self.emailTextField.text!).observe(.value, with: { snapshot in
if snapshot.exists(){
//User email exist
}
else{
//email does not [email id available]
}
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.