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

时间:2016-10-13 05:16:32

标签: android firebase firebase-authentication

我想检查用户是否尝试在Firebase用户身份验证方法中使用<a href="http://www.test.nl/result?card_id=1&card_id=2">Card 1</a> 注册,此用户已在我的应用中注册。

Registered Users

9 个答案:

答案 0 :(得分:12)

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

或者,您可以通过调用fetchSignInMethodsForEmail()(之前称为fetchProvidersForEmail())来检测是否已使用电子邮件地址。

答案 1 :(得分:11)

当用户尝试使用相同的电子邮件地址创建用户时,任务响应将为&#34;响应:该电子邮件地址已被其他帐户使用。&#34; < / p>

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 Method Advanced Setting

答案 2 :(得分:6)

首先,您需要确保在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。顾名思义,如果电子邮件已经存在,则抛出此异常。如果抛出的异常是此类的实例,请让用户知道。

答案 3 :(得分:4)

作为@ 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 :(得分:3)

我正在调查这种情况,我们可以检测用户是否存在并执行注册和登录。 fetchProvidersForEmail现在是最佳选择。我找到了 this 教程。希望它也能帮到你!

答案 5 :(得分:1)

请参阅:Manage Users

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

此方法为与提供的电子邮件相对应的用户返回UserRecord对象。

如果提供的电子邮件不属于现有用户,或者由于任何其他原因而无法提取该用户,则Admin SDK会引发错误。有关错误代码的完整列表,包括描述和解决步骤,请参见Admin Authentication API Errors

答案 6 :(得分: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();
                }
            });

答案 7 :(得分:0)

将以下代码添加到 MainActivity.java 文件。当用户尝试使用相同的电子邮件地址注册消息时,该电子邮件地址已被其他帐户使用&#34;将弹出为 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();
                    }

                }
            });

答案 8 :(得分:-2)

您无需执行任何操作,因为Firebase的后端将完成此任务。

除非您指的是重新验证该应用。 举一个例子,w