如何检查iOS上的Firebase中是否已使用电子邮件地址?
我正在为我的iOS应用程序使用Firebase身份验证。现在我想检查输入的电子邮件地址是否可用。我发现我必须为此使用createUserWithEmailAndPassword
。但问题是我不想通过密码。我只想检查使用电子邮件。我怎样才能做到这一点?如何检查iOS上的Firebase中是否已使用电子邮件地址?
您需要使用fetchProvidersForEmail:完成: https://firebase.google.com/docs/reference/ios/firebaseauth/api/reference/Classes/FIRAuth#-fetchprovidersforemailcompletion
它会返回与该电子邮件相关的供应商ID列表。如果您在列表中获得“密码”,则该电子邮件已存在电子邮件/密码帐户,您可以显示登录页面。
不幸的是,您无法通过Firebase执行此操作。电子邮件帐户还需要密码。
如果你不希望用户必须输入密码,你可以使用其他帐户选项,如Facebook,谷歌,Twitter的等
其实我的设计就像有第一页,用户将输入电子邮件地址。如果该电子邮件已被注册,则用户导航到下一个页面,该页面是用户输入密码并登录到应用程序的密码页面。 @bradley –
火力地堡中身份验证的用户帐户已经可以电子邮件地址被验证,它不一定是一个电子邮件+密码帐户。 To verify the email address for a user call user.sendEmailVerification()
。
如果要在注册用户之前检查电子邮件地址是否已被使用,Firebase Admin SDK的方法为look up a user by their email address:admin.auth().getUserByEmail(email)
。此方法需要管理权限,并且(像所有Admin SDK一样)只应在受信任的环境中运行 - 通常是您控制的服务器或Firebase的Cloud Functions。
最后注意:请注意,即使您在注册之前检查电子邮件地址是否可用,在您拨打createUserWithEmailAndPassword()
时,电子邮件地址可能会被其他用户声称。 Jen评论说:如果电子邮件地址已被使用,您还需要处理createUserWithEmailAndPassword()
引发的错误。
谢谢!任何其他选项,而不使用'admin.auth()。getUserByEmail(email)'? –
你只需要创建一个引用,而用户在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]
}
})
以下是(斯威夫特4)你可能会寻找Firebase function的结构:
Auth.auth().fetchProviders(forEmail: emailAddress, completion: {
(providers, error) in
if let error = error {
print(error.localizedDescription)
} else if let providers = providers {
print(providers)
}
})
如果电子邮件地址已注册用户,你会得到一个列表的电子邮件地址的提供者 是用来。否则,提供者列表将为空,因此电子邮件地址未被注册。
如果发送电子邮件,Firebase身份验证已经返回错误。您为什么要在用户输入密码之前进行检查? –
你想查看电子邮件是什么意思?您是否确定电子邮件已被使用?或者是什么? – UmarZaii
其实我的设计就好像有第一页用户输入电子邮件地址。如果该电子邮件已被注册,则用户导航到下一个页面,该页面是用户输入密码并登录到应用程序的密码页面。所以在第一页上,我想检查该电子邮件是否已注册。 @JenPerson –