Comparte en Facebook Twitter Google+

cambiar clave con LaravelLaravel 5 es genial y por eso incluye “out of the box” el módulo para recuperar contraseñas, el cual es imprescindible en la mayoría de los sistemas, pero ¿Qué pasa si el usuario no ha olvidado su contraseña, sino que simplemente quiere cambiarla?

La mayoría de los sistemas web incluyen la posibilidad de cambiar tu clave una vez que te has conectado a dicho sistema, pero por seguridad te pedirán que confirmes tu contraseña actual.

En este tutorial aprenderás cómo crear reglas personalizadas de validación con Laravel para crear la regla que te permitirá confirmar la clave actual del usuario.

Si ya has trabajado con Laravel 4, quizás estás acostumbrado a crear reglas de validación nuevas usando el método Validator::extend de esta manera:

En Laravel 5 esto sigue funcionando, y puedes colocarlo dentro del método “boot” de cualquier Service Provider. Pero la manera que me parece más correcta de agregar la regla extra, es extender la clase de Validación por completo.

Para ello crea esta clase dentro de tu carpeta app/. Puedes dejarla justo en app/ o crear un subdirectorio llamado “Core”, “Support”, “Validation” o lo que quieras, sólo recuerda que el nombre del directorio y del namespace deben coincidir dado que Laravel 5 usa PSR-4 para autocargar las clases:

Nota: por supuesto no olvides cambiar el namespace.

Con esto ya tienes tu clase de validación personalizada, fíjate que incluí una nueva regla de validación para comprobar que la clave actual del usuario es correcta, esto, como ya comenté, es una medida común de seguridad, más que nada para prevenir que si el usuario dejó su cuenta abierta una tercera persona maliciosa no pueda cambiar la contraseña.

Nota también que Laravel nuevamente hace uso de convenciones (cumpliendo con el principio DRY): si quieres definir una nueva regla de validación esta llevará el prefijo “validate” y luego el nombre de la regla en formato CamelCase.

Lo segundo que necesitamos es registrar nuestra clase de validación y esto lo hacemos con un Service Provider, crea esta clase dentro de app/Providers/ValidatorServiceProvider.php:

Una vez hecho esto tienes que registrar el Service Provider, esto se hace en el archivo config/app.php, busca el array llamado $providers y coloca al final el nombre completo de la clase (incluyendo el namespace):

¡Listo! Ya la nueva regla de validación está disponible. Ahora puedes definir un nuevo Form Request o validar con el método $this->validate dentro del controlador, como hemos visto ya en el curso de Laravel 5.

A mí me gustan los Form Requests así que yo creé el mío con lo siguiente:

Acá la novedad es que tenemos una nueva regla llamada “current_password” (nota que es lo mismo que definimos en nuestro Validador pero sin el prefijo validate y el formato es con underscore en vez de camel case.

Si has seguido el curso de Laravel 5 seguramente ya sabrás como hacer uso de los Form Requests y sabrás cómo crear formularios en tus vistas así que dejo el resto del código en tus manos.


Esta es una nueva serie de artículos cortos o “tips” de Laravel 5 que surge generalmente de dudas entre los estudiantes del curso de Laravel 5 ¿Te parece útil o no? Por favor cuéntame en los comentarios.

Igualmente si encuentras útil el tip: ¡Compártelo por favor!

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