0
votes

I'm using Firebase authentication with email verification to implement user registration, like this:

private void register(String email, String password) {
    FirebaseAuth auth FirebaseAuth.getInstance();

        auth.createUserWithEmailAndPassword(email, password)
            .addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                @Override
                    public void onSuccess(AuthResult authResult) {

                        // is user registered yet?
                        if (authResult.getUser() != null) {

                            // yes, but email is not verified yet. so send verication link
                            if (!authResult.getUser().isEmailVerified()){
                                final FirebaseUser user = authResult.getUser();
                                
                                user.sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task) {

                                        if (task.isSuccessful()) {
                                            Toast.makeText(getApplicationContext(),
                                                    "Verification link has been sent to " + user.getEmail(), Toast.LENGTH_SHORT).show();
                                        } else {
                                            Toast.makeText(getApplicationContext(), "Error: cannot send verification link.", Toast.LENGTH_SHORT).show();
                                        }
                                    }
                                });
                            }
                            
                            // yes, and email is already verified 
                            else {
                                Intent iii = new Intent(getApplicationContext(), MainActivity.class());
                                startActivity(iii);
                               
                            }
                        }
                    }
                })
                // registration error....
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });
    }

After user registration was done, I could see that email on Authentication menu inside Firebase console. Then I clicked the verification link on email, and got this message on browser:

Your email has been verified You can now sign in with your new account

So registration had been completed succesfully and I can login, right?

But these code on the LoginActivity:

FirebaseUser user = auth.getCurrentUser();
return user.isEmailVerified();

returns false. So somehow the email verification process wasn't succesfully done. What's wrong here?

I'm using compileSdkVersion 29, and firebase-auth 19.3.2.

1

1 Answers

0
votes

this code is working

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {

    boolean emailVerified = user.isEmailVerified();
if(emailVerified ){
//email verified
}
}