web-dev-qa-db-ja.com

Firebase Auth-電子メールとパスワードで-すでに登録されているユーザーを確認します

Firebaseユーザー認証方法でユーザーがcreateUserWithEmailAndPassword()でサインアップしようとしたときに確認したいのですが、このユーザーは既にアプリに登録されています。

Registered Users

11
Coolbub

その電子メールアドレスを持つユーザーが既に存在するかどうかを検出するために、createUserWithEmailAndPassword ()の呼び出しが_auth/email-already-in-use_で失敗したことを検出できます。 @Srinivasanがこれに対する答えを投稿したことがわかります。

または、 fetchSignInMethodsForEmail() (以前の呼び出し fetchProvidersForEmail() )を呼び出すことで、メールアドレスがすでに使用されていることを検出できます。

12

ユーザーが同じ電子メールアドレスを持つユーザーを作成しようとすると、タスクの応答は "応答:電子メールアドレスは既に別のアカウントで使用されています。"

mFirebaseAuth.createUserWithEmailAndPassword(email,password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {                           
                        if(task.isSuccessful()){
                           //User registered successfully
                        }else{
                            Log.i("Response","Failed to create user:"+task.getException().getMessage());
                        }
                    }
                });

Firebase Auth SignIn MethodAdvanced Setting

11
Srinivasan

まず、Firebaseコンソールでその制限が有効になっていることを確認する必要があります(アカウントとメールアドレスの設定)。 @Srinivasanの答えを見てください。

次に、Javaコードでこれを行います。

firebaseAuthenticator.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (!task.isSuccessful()) {

                            if (task.getException() instanceof FirebaseAuthUserCollisionException) {
                                Toast.makeText(SignUpActivity.this, "User with this email already exist.", Toast.LENGTH_SHORT).show();
                            }


                        } else {
                            sendVerificationEmail();
                            startActivity(new Intent(SignUpActivity.this, DetailsCaptureActivity.class));
                        }

                        // ...
                    }
                });

これがトリックの起こる場所です:

if (task.getException() instanceof FirebaseAuthUserCollisionException) {
                            Toast.makeText(SignUpActivity.this, 
          "User with this email already exist.", Toast.LENGTH_SHORT).show();

ユーザーを電子メールとパスワードで登録するときにいくつかの例外がスローされる可能性がありますが、関心のあるものはFirebaseAuthUserCollisionExceptionです。名前が示すように、電子メールが既に存在する場合、この例外がスローされます。スローされた例外がこのクラスのインスタンスである場合、ユーザーに知らせてください。

7

ここでの@Frankの答えの練習として、fetchProvidersForEmail()を使用するコードがあります

private boolean checkAccountEmailExistInFirebase(String email) {
                FirebaseAuth mAuth = FirebaseAuth.getInstance();
                final boolean[] b = new boolean[1];
                mAuth.fetchProvidersForEmail(email).addOnCompleteListener(new OnCompleteListener<ProviderQueryResult>() {
                    @Override
                    public void onComplete(@NonNull Task<ProviderQueryResult> task) {
                        b[0] = !task.getResult().getProviders().isEmpty();
                    }
                });
                return b[0];
            }
4
Dasser Basyouni

ユーザーが存在するかどうかを検出し、登録とログインを実行できるこのような状況を調査していました。 fetchProvidersForEmailが現在最適なオプションです。私はthisチュートリアルを見つけました。それがあなたにも役立つことを願っています!

3
Akshay Taru

参照: ユーザーの管理

UserRecord userRecord = FirebaseAuth.getInstance().getUserByEmail(email);
System.out.println("Successfully fetched user data: " + userRecord.getEmail());

このメソッドは、提供された電子メールに対応するユーザーのUserRecordオブジェクトを返します。

提供された電子メールが既存のユーザーのものではない場合、または他の理由でユーザーを取得できない場合、Admin SDKはエラーをスローします。説明と解決手順を含むエラーコードの完全なリストについては、 Admin Authentication API Errors を参照してください。

1
Nishesh Jain

以下のコードをMainActivity.Javaファイルに追加します。ユーザーが同じメールアドレスで登録しようとすると、「メールアドレスは既に別のアカウントで使用されています」というメッセージが表示されますToastとしてポップアップします

mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {

                    if(!task.isSuccessful()){

                        Toast.makeText(MainActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();

                    }
                    if(task.isSuccessful()){
                        Toast.makeText(MainActivity.this, "Sign up successfull", Toast.LENGTH_SHORT).show();
                    }

                }
            });
0
private ProgressDialog progressDialog;
progressDialog.setMessage("Registering, please Wait...");
progressDialog.show();

mAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {

                    //checking if success
                    if (task.isSuccessful()) {
                        //Registration was successfull:
                        Toast.makeText(RegistrationActivity.this, "Successfully registered!", Toast.LENGTH_LONG).show();

                    } else {
                        //Registration failed:
                        //task.getException().getMessage() makes the magic
                        Toast.makeText(RegistrationActivity.this, "Registration failed! " + "\n" + task.getException().getMessage(), Toast.LENGTH_LONG).show();
                    }
                    progressDialog.dismiss();
                }
            });
0
Annemarie Rinyu