recordar - register user in firebase
El correo electrónico de confirmación de Firebase no se envía (4)
He configurado correctamente la autenticación de correo electrónico / contraseña de Firebase, pero por razones de seguridad quiero que el usuario confirme su correo electrónico. Dice en el sitio web de Firebases:
Cuando un usuario se registra con una dirección de correo electrónico y una contraseña, se envía un correo electrónico de confirmación para verificar su dirección de correo electrónico.
Pero cuando me registro, no recibo un correo electrónico de confirmación.
He buscado y solo puedo encontrar un código para enviar el correo electrónico de restablecimiento de contraseña, pero no un código para enviar el correo electrónico de confirmación.
He mirado aquí:
https://firebase.google.com/docs/auth/ios/manage-users#send_a_password_reset_email
Alguien tiene idea de cómo puedo hacerlo?
Después de crear un usuario, se devuelve un objeto Usuario, donde puede verificar si el correo electrónico del usuario ha sido verificado o no.
Cuando un usuario no ha sido verificado, puede activar el método sendEmailVerification en el propio objeto del usuario.
firebase.auth()
.createUserWithEmailAndPassword(email, password)
.then(function(user){
if(user && user.emailVerified === false){
user.sendEmailVerification().then(function(){
console.log("email verification sent to user");
});
}
}).catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
console.log(errorCode, errorMessage);
});
También puede verificar escuchando AuthState, el problema con el siguiente método es que con cada nueva sesión (al actualizar la página), se envía un nuevo correo electrónico.
firebase.auth().onAuthStateChanged(function(user) {
user.sendEmailVerification();
});
Noté que los nuevos documentos de autenticación de correo electrónico de Firebase no están debidamente documentados.
firebase.auth().onAuthStateChanged(function(user) {
user.sendEmailVerification();
});
Tenga en cuenta que:
- Solo puede enviar la verificación por correo electrónico a los usuarios objeto que creó mediante el método de correo electrónico y contraseña createUserWithEmailAndPassword
- Solo después de que haya firmado usuarios en estado autenticado, Firebase le devolverá una promesa del objeto de autenticación.
- El antiguo método onAuth se ha cambiado a onAuthStateChanged .
Para verificar si el correo electrónico está verificado:
firebase.auth().onAuthStateChanged(function(user) {
if (user.emailVerified) {
console.log(''Email is verified'');
}
else {
console.log(''Email is not verified'');
}
});
Puede enviar un correo electrónico de verificación y verificar si se verificó de la siguiente manera en AuthListener:
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
//---- HERE YOU CHECK IF EMAIL IS VERIFIED
if (user.isEmailVerified()) {
Toast.makeText(LoginActivity.this,"You are in =)",Toast.LENGTH_LONG).show();
}
else {
//---- HERE YOU SEND THE EMAIL
user.sendEmailVerification();
Toast.makeText(LoginActivity.this,"Check your email first...",Toast.LENGTH_LONG).show();
}
} else {
// User is signed out
Log.d(TAG, "onAuthStateChanged:signed_out");
}
// [START_EXCLUDE]
updateUI(user);
// [END_EXCLUDE]
}
};
si está utilizando la compilación "com.google.firebase: firebase-auth: 9.2.0" y compila ''com.google.firebase: firebase-core: 9.2.0'', el método sendEmailVerification () no se resolverá hasta que actualice a 9.8.0 o superior. Perdí la mayor parte del tiempo antes de que lo descubriera.