2017-07-27 13 views
1

iOSアプリケーションにFirebase認証を使用しています。今すぐ入力した電子メールアドレスが利用可能かどうか確認したい。私はこのためにcreateUserWithEmailAndPasswordを使用しなければならないことを知りました。しかし、問題は私がパスワードを渡すしたくないということです。私は電子メールを使用してチェックしたいだけです。これどうやってするの?iOSのFirebaseで電子メールアドレスがすでに使用されているかどうかを確認するにはどうすればいいですか?

+0

電子メールが取得された場合、Firebase Authはすでにエラーを返します。ユーザーがパスワードを入力する前に、なぜチェックしたいのですか? –

+0

電子メールをチェックしたいのはどういう意味ですか?電子メールが既に使用されていることを確認したいですか?または何? – UmarZaii

+0

実際に私のデザインは、ユーザーが電子メールアドレスを入力する最初のページがあるようです。その電子メールが既に登録されている場合、ユーザーは次のページに移動します。このページはパスワードページで、ユーザーはパスワードを入力してアプリケーションに入ります。だから最初のページで私は電子メールが登録されているかどうかをチェックしたい。 @JenPerson –

答えて

1

あなたはfetchProvidersForEmailを使用する必要があります:完了: https://firebase.google.com/docs/reference/ios/firebaseauth/api/reference/Classes/FIRAuth#-fetchprovidersforemailcompletion

これは、その電子メールに関連付けられているプロバイダのIDのリストを返します。リストに「パスワード」が表示された場合は、その電子メールの電子メール/パスワードアカウントが既に存在します。サインインページを表示することができます。

0

残念ながら、Firebaseではこれを行うことはできません。電子メールアカウントにはパスワードも必要です。あなたは、ユーザーがパスワードを入力する必要がしたくない場合は

、あなたはなど

+0

実際に私のデザインは、ユーザーが電子メールアドレスを入力する最初のページがあるようです。その電子メールが既に登録されている場合、ユーザーは次のページに移動します。このページはパスワードページで、ユーザーはパスワードを入力してアプリケーションに入ります。 @ブラッドリー –

3

フェイスブック、グーグル、ツイッターできるメールアドレスを持っているFirebase認証ですべてのユーザーアカウントとして、別のアカウントオプションを使用することができます確認するには、電子メール+パスワードアカウントである必要はありません。 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のクラウド機能)でのみ実行する必要があります。

最後の注意:登録する前にメールアドレスが利用可能かどうかを確認しても、createUserWithEmailAndPassword()に電話するまでにメールアドレスが別のユーザーによって請求される可能性があることに注意してください。したがって、Jenがコメントしたように、電子メールアドレスがすでに使用されている場合は、createUserWithEmailAndPassword()が発生するエラーも処理する必要があります。

+0

ありがとう! 'admin.auth()。getUserByEmail(email)'を使わない他のオプション? –

0

firebasebaseの "email"として登録された電子メールIDを持つfirebaseDBの親 "users"にユーザがサインインしている間に参照を作成するだけで、電子メールが存在するかどうかチェック中に次のクエリ呼び出しを実行するだけですか

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

は、以下のあなたが探しているかもしれないFirebase functionの構造(スウィフト4)である:

Auth.auth().fetchProviders(forEmail: emailAddress, completion: { 
     (providers, error) in 

     if let error = error { 
      print(error.localizedDescription) 
     } else if let providers = providers { 
      print(providers) 
     } 
    }) 

メールアドレスは、すでにユーザーに登録されている場合は、リストを取得します電子メールアドレスに使用されます。それ以外の場合、プロバイダのリストは空になり、したがって電子メールアドレスは登録されません。