# Verificación de Correo Electrónico

# Introducción

Muchas aplicaciones web requieren que los usuarios verifiquen sus correos electrónicos usando la aplicación. En lugar de forzarte a volver a implementar esto en cada aplicación, Laravel proporciona métodos convenientes para enviar y verificar solicitudes de verificación de correos electrónicos.

# Preparación del modelo

Para comenzar, verifica que tu modelo App\User implementa la interfaz Illuminate\Contracts\Auth\MustVerifyEmail:

<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;

    // ...
}

# Consideraciones de la base de datos

# Columna de verificación de correo electrónico

Luego, tu tabla user debe contener una columna email_verified_at para almacenar la fecha y la hora en la que la dirección de correo electrónico fue verificada. Por defecto, la migración de la tabla user incluida con el framework Laravel ya incluye esta columna. Así que, lo único que necesitas es ejecutar la migración de la base de datos:

php artisan migrate

# Rutas

Laravel incluye la clase Auth\VerificationController que contiene la lógica necesaria para enviar enlaces de verificación y verificar correos electrónicos. Para registrar las rutas necesarias para este controlador, pasa la opción verify al método Auth::routes:

Auth::routes(['verify' => true]);

# Protegiendo rutas

El middleware de rutas puede ser usado para permitir que sólo usuarios autorizados puedan acceder a una ruta dada. Laravel viene con un middleware verified, que está definido en Illuminate\Auth\Middleware\EnsureEmailIsVerified. Dado que este middleware ya está registrado en el kernel HTTP de tu aplicación, lo único que necesitas hacer es adjuntar el middleware a una definición de ruta:

Route::get('profile', function () {
    // Only verified users may enter...
})->middleware('verified');

# Vistas

Para generar todas las vistas necesarias para la verificación de correo electrónico, puedes usar el paquete laravel/ui de Composer:

composer require laravel/ui --dev

php artisan ui vue --auth

La vista de verificación de correo electrónico es colocada en resources/views/auth/verify.blade.php. Eres libre de personalizar esta vista según sea necesario para tu aplicación.

# Luego de verificar correos electrónicos

Luego de que una dirección de correo electrónico es verificada, el usuario será redirigido automáticamente a /home. Puedes personalizar la ubicación de redirección post-verificación definiendo un método redirectTo o propiedad en VerificationController:

protected $redirectTo = '/dashboard';

# Eventos

Laravel despacha eventos durante el proceso de verificación de correo electrónico. Puedes agregar listeners a estos eventos en tu EventServiceProvider:

/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
    'Illuminate\Auth\Events\Verified' => [
        'App\Listeners\LogVerifiedUser',
    ],
];