Firebase email verification android

徘徊边缘 提交于 2020-01-24 20:00:11

问题


I am new to Firebase development. I am creating a user login system with Firebase. I am struggling with verifying emails registered users. Here is the code I wrote.

auth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    Toast.makeText(MainActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show();
                    progressBar.setVisibility(View.GONE);
                    FirebaseUser user= FirebaseAuth.getInstance().getCurrentUser();
                    user.sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if(task.isSuccessful()){
                                Log.i("Success", "Yes");
                            }
                            else{
                                Log.i("Success", "No");}
                        }
                    });

                    if (!task.isSuccessful()) {
                        Toast.makeText(MainActivity.this, "Authentication failed." + task.getException(),
                                Toast.LENGTH_SHORT).show();
                    } else {

                        startActivity(new Intent(MainActivity.this, Activity2.class));
                        finish();
                    }

                }
            });
        }
    });

EDIT: No verification email is triggered when sign up is successful. The error I am getting is

10-12 10:41:47.579 10529-10529/com.firebase I/Success:
Nocom.google.firebase.FirebaseException: An internal error has occurred. [ USER_NOT_FOUND ]


回答1:


You need to check the status of createUserWithEmailAndPassword() to ensure that it is successful before getting the current user and calling sendEmailVerification(). There are a number of reasons why createUserWithEmailAndPassword() might fail (account already exists, weak password, malformed email address, etc.). When it does fail, the current user with be the previously signed-in user or null, if there has not been a previous sign-in.

Restructure your code like this:

    auth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            Toast.makeText(MainActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show();
            progressBar.setVisibility(View.GONE);

            if (!task.isSuccessful()) {
                Toast.makeText(MainActivity.this, "Authentication failed." + task.getException(),
                        Toast.LENGTH_SHORT).show();
            } else {
                FirebaseUser user= FirebaseAuth.getInstance().getCurrentUser();
                user.sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if(task.isSuccessful()){
                            Log.i("Success", "Yes");
                        }
                        else{
                            Log.i("Success", "No");}
                    }
                });

                startActivity(new Intent(MainActivity.this, Activity2.class));
                finish();
            }
        }
    });



回答2:


  1. You need to Enable Email & Password Authentication, Configuring Email & Password

  2. In this page you can find many tutorials on the page.

If you are using the new version of firebase, you could try to check your connection... Info here



来源:https://stackoverflow.com/questions/39990861/firebase-email-verification-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!