usuario studio signinwith con authui auth autenticacion android firebase firebase-authentication

android - studio - ¿Cómo enviar correos electrónicos de verificación con Firebase?



firebase console (3)

Use FirebaseAuth.getInstance().getCurrentUser().sendEmailVerification() y FirebaseAuth.getInstance().getCurrentUser().isEmailVerified()

No hay forma de desactivar la cuenta a través del SDK de Firebase. Lo que puedes hacer es usar el GetTokenResult contiene el token de identificación de Firebase Auth y validarlo contra tu backend personalizado o establecer un marcador en la base de datos de Firebase correspondiente a ese usuario. Personalmente iría con la bandera en la base de datos de Firebase

Estoy registrando a mis usuarios usando el método de correo electrónico y contraseña de Firebase. Me gusta esto:

mAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { FirebaseUser signed = task.getResult().getUser(); writeNewUser(signed.getUid()); new android.os.Handler().postDelayed( new Runnable() { public void run() { updateUser(b); } }, 3000); } else { new android.os.Handler().postDelayed( new Runnable() { public void run() { onSignupFailed(); } }, 3000); } } });

Después de que el correo electrónico del usuario se haya registrado correctamente, me gustaría que Firebase envíe un correo electrónico de verificación. Sé que esto es posible usando sendEmailVerification de Firebase. Además de enviar este correo electrónico, quiero que la cuenta del usuario se deshabilite hasta que verifiquen el correo electrónico. Esto también requeriría el uso de la función isEmailVerified de Firebase. Sin embargo, no he conseguido que Firebase envíe el correo electrónico de verificación, no he podido descifrarlo para inhabilitar y habilitar la cuenta que envía el correo electrónico de verificación y después de que se ha verificado.


Esta pregunta es sobre cómo usar Firebase para enviar el correo electrónico de verificación. El OP no puede descubrir cómo deshabilitar y habilitar la cuenta que envía el correo electrónico de verificación y después de que se ha verificado.

Además, esto no está documentado adecuadamente en la documentación de firebase. Así que estoy escribiendo un procedimiento paso a paso que alguien puede seguir si él / ella enfrenta el problema.

1) El usuario puede usar el método createUserWithEmailAndPassword.

Ejemplo:

mAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { Log.d("TAG", "createUserWithEmail:onComplete:" + task.isSuccessful()); // If sign in fails, display a message to the user. If sign in succeeds // the auth state listener will be notified and logic to handle the // signed in user can be handled in the listener. if (!task.isSuccessful()) { // Show the message task.getException() } else { // successfully account created // now the AuthStateListener runs the onAuthStateChanged callback } // ... } });

Si se creó la nueva cuenta, el usuario también inicia sesión y AuthStateListener ejecuta la devolución de llamada onAuthStateChanged. En la devolución de llamada, puede administrar el trabajo de envío del correo electrónico de verificación al usuario.

Ejemplo:

onCreate(...// mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { // User is signed in // NOTE: this Activity should get onpen only when the user is not signed in, otherwise // the user will receive another verification email. sendVerificationEmail(); } else { // User is signed out } // ... } };

Ahora el correo electrónico de verificación de envío se puede escribir como:

private void sendVerificationEmail() { FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); user.sendEmailVerification() .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { // email sent // after email is sent just logout the user and finish this activity FirebaseAuth.getInstance().signOut(); startActivity(new Intent(SignupActivity.this, LoginActivity.class)); finish(); } else { // email not sent, so display message and restart the activity or do whatever you wish to do //restart this activity overridePendingTransition(0, 0); finish(); overridePendingTransition(0, 0); startActivity(getIntent()); } } }); }

Ahora viene a LoginActivity:

Aquí, si el usuario inició sesión con éxito, simplemente podemos llamar a un método en el que está escribiendo la lógica para verificar si el correo electrónico está verificado o no.

Ejemplo:

mAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { //Log.d("TAG", "signInWithEmail:onComplete:" + task.isSuccessful()); // If sign in fails, display a message to the user. If sign in succeeds // the auth state listener will be notified and logic to handle the // signed in user can be handled in the listener. if (!task.isSuccessful()) { //Log.w("TAG", "signInWithEmail:failed", task.getException()); } else { checkIfEmailVerified(); } // ... } });

Ahora considere el método checkIfEmailVerified:

private void checkIfEmailVerified() { FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if (user.isEmailVerified()) { // user is verified, so you can finish this activity or send user to activity which you want. finish(); Toast.makeText(LoginActivity.this, "Successfully logged in", Toast.LENGTH_SHORT).show(); } else { // email is not verified, so just prompt the message to the user and restart this activity. // NOTE: don''t forget to log out the user. FirebaseAuth.getInstance().signOut(); //restart this activity } }

Así que aquí estoy comprobando si el correo electrónico está verificado o no. De lo contrario, cierre la sesión del usuario.

Así que este era mi enfoque para hacer un seguimiento de las cosas correctamente.


envíale la verificación Email

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); user.sendEmailVerification();

comprobar si el usuario verificado

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); boolean emailVerified = user.isEmailVerified();