Firebase Auth - 使用电子邮件和密码 - 检查用户是否已注册

Coo*_*bub 12 android firebase firebase-authentication

我想检查用户何时尝试使用createUserWithEmailAndPassword()Firebase用户身份验证方法注册,此用户已在我的应用中注册.

注册用户

Fra*_*len 13

要检测具有该电子邮件地址的用户是否已存在,您可以检测呼叫何时createUserWithEmailAndPassword ()失败auth/email-already-in-use.我看到@Srinivasan刚刚发布了一个答案.

或者,您可以通过调用fetchSignInMethodsForEmail()(先前调用的fetchProvidersForEmail())来检测已使用的电子邮件地址.


Sri*_*san 11

当用户尝试使用相同的电子邮件地址创建用户时,任务响应将为"响应:电子邮件地址已被其他帐户使用".

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());
                        }
                    }
                });
Run Code Online (Sandbox Code Playgroud)

Firebase Auth SignIn方法高级设置


ojo*_*ifu 7

首先,您需要确保在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));
                        }

                        // ...
                    }
                });
Run Code Online (Sandbox Code Playgroud)

这就是诀窍发生的地方:

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

使用电子邮件和密码注册用户时可能会抛出几个异常,但我们感兴趣的是FirebaseAuthUserCollisionException.顾名思义,如果电子邮件已存在,则抛出此异常.如果抛出的异常是此类的实例,请让用户知道.