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.