Laravel trae por defecto un sistema de autenticación de usuarios que puedes agregar a tu aplicación con el  comando php artisan make:auth. Este sistema incluye la funcionalidad para la recuperación de contraseña de un usuario, que envía un email con el mensaje y el enlace para que el usuario pueda recuperarla, sin embargo, este correo es genérico y en inglés, por lo que si tu aplicación está en español o quieres un mensaje más descriptivo necesitarás personalizar esta funcionalidad.  Con este tutorial aprenderás cómo crear un mensaje para el correo de recuperación de contraseñas adaptado al contexto de tu aplicación:

Cuando un usuario de nuestro sistema hace clic en la opción «¿Olvide mi contraseña?» o «Forgot Your Password?» y escribe en su dirección de correo, a su bandeja de entrada llega de manera predeterminada algo como lo siguiente:

 

Veamos cómo podemos personalizar este mensaje:

Sobrescribe el envío del email

Lo primero que debes saber es que el email para recuperar la contraseña se envía como una notificación por medio del sistema de notificaciones de Laravel.  Esto está configurado a través del trait Illuminate\Auth\Passwords\CanResetPassword en el modelo User, el cual contiene dos métodos:

  • getEmailForPasswordReset que recupera el email del usuario a donde se enviará la notificación.  Necesitarás modificar este método si el atributo de tu modelo User donde se encuentra la dirección de correo del usuario no se llama email.
  • sendPasswordResetNotification con el cual se envía la notificación, usando la clase encargada de construir el email a enviar. Debes cambiar la notificación por la personalizada por ti.

Por tanto, para personalizar el email debemos sobrescribir este trait, pero no lo podemos hacer directamente pues es un archivo que se encuentra en el directorio vendor. Para ello, tenemos dos opciones: crear en nuestro directorio app un nuevo trait que use el modelo User o agregar directamente el o los métodos en dicho modelo. ¿Cuál opción escoger? Depende de ti.

Tomando la segunda opción puedes entonces agregar el método sendPasswordResetNotification a tu modelo User y usar una notificación creada por ti, en vez de la predeterminada de Laravel:

public function sendPasswordResetNotification($token)
{
    $this->notify(new MyResetPassword($token));
}

No olvides importar la clase use App\Notifications\MyResetPassword;

Crea la nueva notificación

En Laravel, una notificación está representada por una clase que se encuentra en App\Notifications que sirven para notificar al usuario acerca de algo que ocurre en la aplicación, en nuestro caso, notificar al usuario por email de la solicitud de recuperación de contraseña. Para crearla ejecutamos:

php artisan make:notification MyResetPassword

De esta clase creada en el directorio App\Notificacions ahora la extendemos de la clase Illuminate\Auth\Notifications\ResetPassword y como nos interesa modificar solo el método toMail, eliminamos los demás, pues quedarían igual como en la clase padre, por tanto, nuestra clase notificación estará de la siguiente manera:

<?php

namespace App\Notifications;

use Illuminate\Auth\Notifications\ResetPassword;
use Illuminate\Notifications\Messages\MailMessage;

class MyResetPassword extends ResetPassword
{
    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->line('You are receiving this email because we received a password reset request for your account.')
            ->action('Reset Password', route('password.reset', $this->token))
            ->line('If you did not request a password reset, no further action is required.');
    }
}

Pero ahora dependiendo de la versión de Laravel con la cual estés trabajando podrás modificar el mensaje de la notificación.

Personaliza la notificación vía Mail para Laravel 5.4

En Laravel 5.4 tu método toMail puede usar los métodos disponibles como subjectgreeting, line, action, salutation para escribir el mensaje de la siguiente manera:

public function toMail($notifiable)
{
    return (new MailMessage)
        ->subject('Recuperar contraseña')
        ->greeting('Hola')
        ->line('Estás recibiendo este correo porque hiciste una solicitud de recuperación de contraseña para tu cuenta.')
        ->action('Recuperar contraseña', route('password.reset', $this->token))
        ->line('Si no realizaste esta solicitud, no se requiere realizar ninguna otra acción.')
        ->salutation('Saludos, '. config('app.name'));
}

Con esto ya tendríamos el email de recuperación de contraseña traducido, manteniendo la estructura del email que viene por defecto, pero si necesitas personalizar la plantilla del mensaje tendrás que publicarla ejecutando:

php artisan vendor:publish --tag=laravel-notifications

Con esto se publica la plantilla email.blade.php en el directorio /resources/views/vendor/notifications que permitirá modificarse según las necesidades. Esta plantilla usa  el nuevo componente Markdown de Mailable en Laravel 5.4 para crear el mensaje, solo recuerda que ésta es la plantilla usada para todas notificaciones enviadas vía email.

Personaliza la notificación via Mail para Laravel 5.3

Para esta versión es totalmente necesario publicar la plantilla del email de notificaciones, puesto que el método salutation no está disponible y quedaría sin personalizarse. Para publicarlo se usa el mismo comando:

php artisan vendor:publish --tag=laravel-notifications

Pero en Laravel 5.3 se publican dos archivos email-plain.blade.phpemail.blade.php que usan Blade y estilos de CSS en línea para crear la plantilla del email. Entonces modifica la vista email.blade.php para que se adapte a las necesidades de la aplicación.

Para luego escribir en la notificación:

public function toMail($notifiable)
{
    return (new MailMessage)
        ->subject('Recuperar contraseña')
        ->greeting('Hola')
        ->line('Estás recibiendo este correo porque hiciste una solicitud de recuperacion de contraseña para tu cuenta.')
        ->action('Recuperar contraseña', url('password/reset', $this->token))
        ->line('Si no realizaste esta solicitud, no se requiere realizar ninguna otra acción.')
}

Resultado

Independiente de una versión u otra el email de la notificación será algo como:

Aún queda por traducir la última parte que se encuentra en la plantilla publicada email.blade.php y además puedes continuar personalizando para agregar el logo de aplicación y cualquier otra información importante.

Espero este tutorial te haya gustado y sea útil, por favor ayúdanos a compartirlo en las redes sociales.

Material relacionado

Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.