# Restablecimiento de contraseñas

# Introducción

TIP TIP

¿Quieres comenzar rápido? Simplemente ejecuta php artisan make:auth en una aplicación de Laravel nueva y navega hasta http://your-app.test/register o cualquier otra URL asignada a tu aplicación. Este simple comando se encargará de maquetar todo tu sistema de autenticación, ¡incluyendo el restablecimiento de contraseñas!.

La mayoría de las aplicaciones web proporciona una forma para que los usuarios restablecen sus contraseñas olvidadas. En lugar de forzarte a reimplementar esto en cada aplicación, Laravel proporciona métodos convenientes para enviar recordatorios de contraseñas y realizar restablecimientos de contraseñas.

TIP TIP

Antes de usar las características de restablecimiento de contraseñas de Laravel, tu usuario debe usar el trait Illuminate\Notifications\Notifiable.

# Consideraciones de la base de datos

Para comenzar, verifica que tu modelo App\User implementa la interfaz Illuminate\Contracts\Auth\CanResetPassword. El modelo App\User incluído con el framework ya implementa esta interfaz y usa el trait Illuminate\Auth\Passwords\CanResetPassword para incluir los métodos necesarios para implementar la interfaz.

# Generando la migración para la tabla de tokens de restablecimiento

Luego, una tabla debe ser creada para almacenar los tokens de restablecimiento de contraseña. La migración para está tabla está incluida con Laravel por defecto y se encuentra en el directorio database/migrations. Así que, todo lo que necesitas hacer es ejecutar tus migraciones de la base de datos:

php artisan migrate

# Enrutamiento

Laravel incluye las clases Auth\ForgotPasswordController y Auth\ResetPasswordController que contienen la lógica necesaria para enviar enlaces de restablecimiento de contraseña y restablece contraseñas de usuarios mediante correo electrónico. Todas las rutas necesarias para realizar restablecimiento de contraseñas pueden ser generadas usando el paquete de Composer: laravel/ui

composer require laravel/ui --dev

php artisan ui vue --auth

# Vistas

Para generar todas las vistas necesarias para el restablecimiento de contraseñas, puedes usar el paquete de Composer: laravel/ui

composer require laravel/ui --dev

php artisan ui vue --auth

Estas vistas están ubicadas en resources/views/auth/passwords. Eres libre de personalizarlas según sea necesario para tu aplicación.

# Luego de resetear contraseñas

Una vez que has definido las rutas y vistas para restablecer las contraseñas de tus usuarios, puedes acceder a la ruta en tu navegador en /password/reset. El ForgotPasswordController incluido con el framework ya incluye la lógica para enviar los correos con el enlace de restablecimiento, mientras que ResetPasswordController incluye la lógica para restablecer las contraseñas de los usuarios.

Luego de que una contraseña es restablecida, la sesión del usuario será automáticamente iniciada y será redirigido a /home. Puedes personalizar la ubicación de redirección definiendo una propiedad redirectTo en ResetPasswordController:

protected $redirectTo = '/dashboard';

Nota

Por defecto, los tokens para restablecer contraseñas expiran luego de una hora. Puedes cambiar esto mediante la opción de restablecimiento de contraseñas expire en tu archivo config/auth.php.

# Personalización

# Personalización de los guards de autenticación

En tu archivo de configuración auth.php, puedes configurar múltiples "guards", que podrán ser usados para definir el comportamiento de autenticación para múltiples tablas de usuarios. Puedes personalizar el controlador ResetPasswordController incluido para usar el guard de tu preferencia sobrescribiendo el método guard en el controlador. Este método debe retornar una instancia guard:

use Illuminate\Support\Facades\Auth;

/**
* Get the guard to be used during password reset.
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/

protected function guard()
{
    return Auth::guard('guard-name');
}

# Personalización del broker de contraseña

En tu archivo de configuración auth.php, puedes configurar múltiples "brokers" de contraseñas, que pueden ser usados para restablecer contraseñas en múltiples tablas de usuarios. Puedes personalizar los controladores ForgotPasswordController y ResetPasswordController incluidos para usar el broker de tu elección sobrescribiendo el método broker:

use Illuminate\Support\Facades\Password;

/**
* Get the broker to be used during password reset.
*
* @return PasswordBroker
*/
protected function broker()
{
    return Password::broker('name');
}

# Personalización del correo de reseteo

Puedes fácilmente modificar la clase de la notificacion usada para enviar el enlace de restablecimiento de contraseña al usuario. Para comenzar, sobrescribe el método sendPasswordResetNotification en tu modelo User. Dentro de este método, puedes enviar la notificación usando cualquier clase que selecciones. El $token de restablecimiento de contaseña es el primer argumento recibido por el método:

/**
* Send the password reset notification.
*
* @param  string  $token
* @return void
*/
public function sendPasswordResetNotification($token)
{
    $this->notify(new ResetPasswordNotification($token));
}