¿Cómo verificar el correo electrónico de un usuario con Flutter?


Avatar de Pedro Cortez

Añadir un sistema de verificación de direcciones de correo electrónico es una excelente manera de evitar la creación abusiva de cuentas en su aplicación, garantizar la calidad de su base de datos y mejorar la seguridad. En esta guía, le explico cómo implementar esto en su aplicación Flutter.


Verificar el correo electrónico de sus usuarios con Flutter

¿Por qué implementar la verificación por correo electrónico?

La verificación por correo electrónico es un método común para asegurarse de la identidad de los usuarios y proteger su aplicación. Entre las ventajas de implementar este sistema, se encuentran:

  • Autenticidad de los usuarios: Garantiza que cada usuario posee una dirección de correo electrónico válida, lo que limita los registros fraudulentos.
  • Mayor seguridad: Al verificar el correo electrónico, se agrega una capa adicional de protección contra abusos y accesos no autorizados.
  • Comunicación confiable: Una dirección de correo electrónico verificada permite enviar notificaciones importantes, como restablecimientos de contraseña o confirmaciones de pedidos.
  • Mejora del compromiso del usuario: Los usuarios que validan su correo electrónico suelen estar más comprometidos con su experiencia en la aplicación.

¿Cómo implementar la verificación por correo electrónico en Flutter?

El primer paso para verificar a su usuario es haber configurado Firebase Auth para su aplicación Flutter y, lógicamente, un sistema de autenticación por correo electrónico.

Por lo tanto, aquí asumo que ya ha realizado esta configuración, pero si no es el caso, le invito a consultar mi guía para configurar Firebase Auth en Flutter.

Afortunadamente, una vez que todo esto está configurado, el resto es bastante sencillo, ya que Flutter ofrece directamente un método para enviar un correo electrónico a un usuario que se ha registrado.

import 'package:firebase_auth/firebase_auth.dart';

Future<void> registerAndSendVerification(String email, String password) async {
  final FirebaseAuth auth = FirebaseAuth.instance;

  try {
    UserCredential userCredential = await auth.createUserWithEmailAndPassword(
      email: email,
      password: password,
    );

    User? user = userCredential.user;
    if (user != null && !user.emailVerified) {
      await user.sendEmailVerification();
      print("Correo de verificación enviado a ${user.email}");
    }
  } on FirebaseAuthException catch (e) {
    print("Error: ${e.message}");
  }
}

En este caso, Firebase solo puede enviar un correo de confirmación a un usuario que ya esté registrado en su base de datos y autenticado. No es posible enviar un correo a un usuario no autenticado sin implementar un sistema mucho más complejo.

Una vez enviado el correo electrónico, solo queda verificar si el usuario ha confirmado su correo. Nuevamente, Flutter nos proporciona una función para esto:

Future<bool> checkEmailVerified() async {
  User? user = FirebaseAuth.instance.currentUser;

  if (user != null) {
    await user.reload();
    return user.emailVerified;
  }
  return false;
}

Después de confirmar que el usuario ha verificado su correo, puede redirigirlo a la pantalla que prefiera.

Recuerde agregar esta lógica tanto a su página de creación de cuenta como a su página de inicio de sesión, en caso de que un usuario decida retroceder en lugar de validar su cuenta de inmediato. También tenga en cuenta que el usuario estará autenticado en Firebase en ese momento, así que no olvide cerrarlo sesión si es necesario.

¿Cómo personalizar el correo de verificación?

Firebase ofrece un correo de verificación predeterminado, pero puede personalizarlo para reflejar mejor su marca. De manera resumida, aquí está cómo hacerlo:

  1. Acceder a Firebase Console:
    Diríjase a Authentication > Modelos de correo electrónico.
    Seleccione la pestaña Correo de verificación.
  2. Personalizar el contenido:
    Agregue su logotipo, cambie el texto o el diseño.
  3. Configurar un dominio personalizado (opcional):
    Agregue un dominio personalizado para mejorar la credibilidad de los correos enviados.