如何检查电子邮件地址是不是已在 iOS 上的 Firebase 中使用?
Posted
技术标签:
【中文标题】如何检查电子邮件地址是不是已在 iOS 上的 Firebase 中使用?【英文标题】:How to check if an email address is already in use in Firebase on iOS?如何检查电子邮件地址是否已在 iOS 上的 Firebase 中使用? 【发布时间】:2017-07-27 17:17:20 【问题描述】:我正在为我的 ios 应用程序使用 Firebase 身份验证。现在我想检查输入的电子邮件地址是否可用。我发现我必须为此使用createUserWithEmailAndPassword
。但问题是我不想传递密码。我只想使用电子邮件进行检查。我该怎么做?
【问题讨论】:
如果电子邮件被接收,Firebase 身份验证已经返回错误。为什么要在用户输入密码之前进行检查? 您要查看电子邮件是什么意思?您是否要确保该电子邮件已被使用?还是什么? 实际上我的设计就像有第一页用户将输入电子邮件地址。如果该电子邮件已注册,则用户导航到下一个页面,即密码页面,用户将在其中输入密码并在应用程序中唱歌。所以在第一页我想检查电子邮件是否已注册。 @JenPerson @JenPerson 在我的 UI 中,我隐藏了“注册”按钮,直到所有字段都正确填写,包括数据库中尚未包含的 有效 电子邮件地址,尚未使用的用户名和包含与密码字段相同的密码的 passwordConfirmation 字段。这可能是他想要在发出 createUser 之前检查的原因。 【参考方案1】:以下是您可能正在寻找的Firebase function 的结构(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)
)
如果电子邮件地址已注册给用户,您将获得使用该电子邮件地址的提供商的列表。否则,提供者列表将为空,因此电子邮件地址未注册。
【讨论】:
fetchProviders 已弃用【参考方案2】:您需要使用 fetchProvidersForEmail:completion: https://firebase.google.com/docs/reference/ios/firebaseauth/api/reference/Classes/FIRAuth#-fetchprovidersforemailcompletion
它将返回与该电子邮件关联的提供商 ID 列表。如果您在列表中获得“密码”,则该电子邮件的电子邮件/密码帐户已经存在,您可以显示您的登录页面。
【讨论】:
【参考方案3】:Firebase 身份验证中具有电子邮件地址的任何用户帐户都可以进行验证,它不必是电子邮件+密码帐户。 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 一样)只能在受信任的环境中运行 - 通常是您控制的服务器或 Cloud Functions for Firebase。
最后说明:请注意,即使您在注册前检查了该电子邮件地址是否可用,但在您致电createUserWithEmailAndPassword()
时,该电子邮件地址可能已被其他用户认领。正如 Jen 评论的那样:如果电子邮件地址已被使用,您还需要处理 createUserWithEmailAndPassword()
引发的错误。
【讨论】:
谢谢!不使用admin.auth().getUserByEmail(email)
的任何其他选项?【参考方案4】:
很遗憾,您无法使用 Firebase 执行此操作。电子邮件帐户也需要密码。
如果您不希望用户输入密码,您可以使用其他帐户选项,例如 Facebook、Google、Twitter 等。
【讨论】:
实际上我的设计就像有第一页用户将输入电子邮件地址。如果该电子邮件已注册,则用户导航到下一个页面,即密码页面,用户将在其中输入密码并在应用程序中唱歌。 @布拉德利【参考方案5】:您只需要在用户注册 FirebaseDB 的父“用户”时创建一个引用,这些用户的电子邮件 id 已在 firebase 应用程序中注册为“电子邮件”,并在您检查电子邮件是否存在时运行以下查询调用或不是
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]
)
【讨论】:
【参考方案6】:以下代码用于更新了 firebase 版本的 swift5。 Auth.auth().fetchSignInMethods(forEmail: emailAddress, completion: (providers, error) in if let error = error print(error.localizedDescription) else if let providers = providers print(providers) )
【讨论】:
以上是关于如何检查电子邮件地址是不是已在 iOS 上的 Firebase 中使用?的主要内容,如果未能解决你的问题,请参考以下文章
使用 MailChimp API v3.0 检查电子邮件地址是不是已在列表中,而无需订阅电子邮件地址
如何检查输入的电子邮件 ID 是不是已在 Paypal 中注册?
Firebase Auth 和 Swift:检查电子邮件是不是已在数据库中