首页 文章

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

提问于
浏览
11

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

Registered Users

8 回答

  • 3

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

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

  • 11

    当用户尝试使用相同的电子邮件地址创建用户时,任务响应将为 "Response: The email address is already in use by another account."

    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

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

  • 12

    作为@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

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

  • -2
    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

    将以下代码添加到 MainActivity.java 文件 . 当用户尝试使用相同的电子邮件地址注册时,将弹出一条消息"The email address is already used by another account"作为 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

    You do not have to do anything because the backend of Firebase will do the job.

    除非您指的是重新验证应用程序 . 以一个例子为例,w

相关问题