Comparte en Facebook Twitter Google+

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:

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:

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:

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:

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:

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:

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:

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 la discusión

Regístrate en Styde y obtén una invitación a nuestro Slack.

Aprende PHP, Laravel y más por sólo 999 al mes: ver planes.