2017-07-27 103 views
1

我正在为我的iOS应用程序使用Firebase身份验证。现在我想检查输入的电子邮件地址是否可用。我发现我必须为此使用createUserWithEmailAndPassword。但问题是我不想通过密码。我只想检查使用电子邮件。我怎样才能做到这一点?如何检查iOS上的Firebase中是否已使用电子邮件地址?

+0

如果发送电子邮件,Firebase身份验证已经返回错误。您为什么要在用户输入密码之前进行检查? –

+0

你想查看电子邮件是什么意思?您是否确定电子邮件已被使用?或者是什么? – UmarZaii

+0

其实我的设计就好像有第一页用户输入电子邮件地址。如果该电子邮件已被注册,则用户导航到下一个页面,该页面是用户输入密码并登录到应用程序的密码页面。所以在第一页上,我想检查该电子邮件是否已注册。 @JenPerson –

回答

0

不幸的是,您无法通过Firebase执行此操作。电子邮件帐户还需要密码。

如果你不希望用户必须输入密码,你可以使用其他帐户选项,如Facebook,谷歌,Twitter的等

+0

其实我的设计就像有第一页,用户将输入电子邮件地址。如果该电子邮件已被注册,则用户导航到下一个页面,该页面是用户输入密码并登录到应用程序的密码页面。 @bradley –

3

火力地堡中身份验证的用户帐户已经可以电子邮件地址被验证,它不一定是一个电子邮件+密码帐户。 To verify the email address for a user call user.sendEmailVerification()

如果要在注册用户之前检查电子邮件地址是否已被使用,Firebase Admin SDK的方法为look up a user by their email addressadmin.auth().getUserByEmail(email)。此方法需要管理权限,并且(像所有Admin SDK一样)只应在受信任的环境中运行 - 通常是您控制的服务器或Firebase的Cloud Functions。

最后注意:请注意,即使您在注册之前检查电子邮件地址是否可用,在您拨打createUserWithEmailAndPassword()时,电子邮件地址可能会被其他用户声称。 Jen评论说:如果电子邮件地址已被使用,您还需要处理createUserWithEmailAndPassword()引发的错误。

+0

谢谢!任何其他选项,而不使用'admin.auth()。getUserByEmail(email)'? –

0

你只需要创建一个引用,而用户在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] 
         } 

        }) 
1

以下是(斯威夫特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) 
     } 
    }) 

如果电子邮件地址已注册用户,你会得到一个列表的电子邮件地址的提供者 是用来。否则,提供者列表将为空,因此电子邮件地址未被注册。

相关问题