Seleccionar página

Cuando un usuario, por cualquier motivo no recuerda su contraseña,le daremos la opción de generar una contraseña nueva.

Laravel trae por defecto rutas, vistas y controladores para el proceso de recuperación de contraseña. Empezamos ejecutando este comando:

Ahora, para ver el resultado y probar el funcionamiento, sólo hay que agregar esta sola linea en el archivo de rutas:

Estas son las rutas que el comando «make:auth» genera automáticamente y que puedes encontrar en el siguiente archivo:

Con fines didácticos, mostraré el proceso de recuperación de contraseña con imágenes acompañadas de sus rutas. Así quedará más claro. Usaré las vistas que se han generado automáticamente con el comando anterior.

El proceso empieza con el formulario de login que tiene el enlace de contraseña olvidada (recuadro en rojo):

GET «/login»

Al pulsar ese enlace, le mostraremos un formulario para que introduzca en email donde quiere recibir el restablecimiento de contraseña:

GET «/password/reset»

Una vez pulse el botón «Send Password Reset Link», enviaremos un email al usuario con un enlace (petición POST a «/password/email») .

El usuario recibirá el siguiente email con el enlace:

Cuando pulse el enlace del email, le mostraremos el formulario que debe rellenar con la nueva contraseña:

GET «/password/reset/{token}»

Ya por último, enviamos los datos al servidor para cambiar la contraseña asociada a ese email (petición POST a «/password/reset») y así finaliza el reseteo de la contraseña.


Vamos a personalizar las rutas, controladores y vistas.

Todas aquellas modificaciones que tengamos que hacer sobre cualquier archivo que se encuentre en el directorio «vendor» NO se pueden realizar sobre los mismos, hay que encontrar una alternativa. El motivo es que con cada actualización del framework que hagamos queriendo o sin querer, Laravel se lo carga, lo borra, y a menos que tengamos un diario de proyecto donde aparezacan los archivos y modificaciones que hayamos hecho, no se recomienda ya que no es ni efectivo ni eficaz. A parte, no serían modificaciones al estilo Laravel (modifications in the Laravel way).

Usaremos las rutas que Laravel trae por defecto, por tanto dejaremos en nuestro archivo de rutas esto:

Editamos el controlador creado anteriormente con el comando «php artisan make:auth»:

Ahora el segundo controlador:

También para que todo funcione correctamente, la migración de la tabla «users» debe tener el siguiente campo/columna:

Modificamos el model «User» para que el campo creado anteriormente no se envíe en la respuesta:

Laravel 5.3 añade una nueva funcionalidad, entre muchas, que es el envío de emails a través de Notificaciones.

El sistema de recuperación de contraseña que nos provee Laravel trae una Notificación por email que usa la vista alojada en «vendor\laravel\framework\src\Illuminate\Notifications\resources\views\email.blade.php». Como he mencionado antes, no podemos editar este archivo (vista). Entonces..¿como se envía una notificación de tipo email con una vista personalizada?

Vayamos por partes. Primero creamos y editamos la clase de tipo Notificación, que se encolará a la lista de tareas (tabla «jobs») :

Ahora editamos el modelo «User» para implementar las notificaciones y usar la clase que generamos en el paso anterior «ResetPassword»:

Cabe destacar que en vez de usar Notifications, podemos usar Mailables y así cambiar por completo la vista del email que se envía al usuario.

Haremos mención a este post cuando estemos en la parte de Angular para modificar las vistas de los formularios que quedan por personalizar alojadas en «resources\views\auth\passwords».

Fuentes:

https://laracasts.com/discuss/channels/laravel/laravel-536-how-to-replace-password-reset-mail-with-custom-mailable-template?page=1

https://laracasts.com/discuss/channels/laravel/how-to-override-message-in-sendresetlinkemail-in-forgotpasswordcontroller

http://laravel.io/forum/07-30-2015-extending-illuminateauthpasswordspasswordbroker

http://stackoverflow.com/questions/30290721/how-to-override-reset-and-validatepasswordwithdefaults-in-passwordbroker-laravel

https://www.reddit.com/r/laravel/comments/4gpeep/overriding_password_reset_method/

http://bogardo.com/mailgun-and-password-reminders/