1. Paquetes
  2. Laravel Fortify

Introducción

Laravel Fortify es una implementación de backend de autenticación sin interfaz de usuario propia para Laravel. Fortify registra las rutas y controladores necesarios para implementar todas las características de autenticación de Laravel, incluyendo inicio de sesión, registro, restablecimiento de contraseña, verificación de correo electrónico, y más. Después de instalar Fortify, puedes ejecutar el comando Artisan route:list para ver las rutas que ha registrado Fortify.

Dado que Fortify no proporciona su propia interfaz de usuario, está diseñado para ser emparejado con tu propia interfaz de usuario que realiza solicitudes a las rutas que registra. Discutiremos exactamente cómo hacer solicitudes a estas rutas en el resto de esta documentación.

Nota Recuerda, Fortify es un paquete destinado a darte un impulso inicial en la implementación de las características de autenticación de Laravel. No estás obligado a usarlo. Siempre eres libre de interactuar manualmente con los servicios de autenticación de Laravel siguiendo la documentación disponible en las secciones de autenticación, restablecimiento de contraseña y verificación de correo electrónico.

¿Qué es Fortify?

Como se mencionó anteriormente, Laravel Fortify es una implementación de backend de autenticación sin interfaz de usuario propia para Laravel. Fortify registra las rutas y controladores necesarios para implementar todas las características de autenticación de Laravel, incluyendo inicio de sesión, registro, restablecimiento de contraseña, verificación de correo electrónico, y más.

No estás obligado a usar Fortify para utilizar las funciones de autenticación de Laravel. Siempre eres libre de interactuar manualmente con los servicios de autenticación de Laravel siguiendo la documentación disponible en la autenticación, restablecimiento de contraseña y verificación de correo electrónico.

Si eres nuevo en Laravel, puede que desees explorar el kit de inicio de aplicación Breeze antes de intentar usar Laravel Fortify. Laravel Breeze proporciona un armazón de autenticación para tu aplicación que incluye una interfaz de usuario construida con Tailwind CSS. A diferencia de Fortify, Breeze publica sus rutas y controladores directamente en tu aplicación. Esto te permite estudiar y familiarizarte con las funciones de autenticación de Laravel antes de permitir que Laravel Fortify implemente estas funciones por ti.

Básicamente, Laravel Fortify toma las rutas y controladores de Laravel Breeze y los ofrece como un paquete que no incluye una interfaz de usuario. Esto te permite crear rápidamente la implementación del backend de la capa de autenticación de tu aplicación sin estar vinculado a opiniones específicas del frontend.

¿Cuándo Debería Usar Fortify?

Es posible que te estés preguntando cuándo es apropiado usar Laravel Fortify. En primer lugar, si estás utilizando uno de los kits de inicio de aplicación de Laravel, no necesitas instalar Laravel Fortify, ya que todos los kits de inicio de aplicación de Laravel ya proporcionan una implementación completa de autenticación.

Si no estás utilizando un kit de inicio de aplicación y tu aplicación necesita funciones de autenticación, tienes dos opciones: implementar manualmente las funciones de autenticación de tu aplicación o utilizar Laravel Fortify para proporcionar la implementación de backend de estas funciones.

Si eliges instalar Fortify, tu interfaz de usuario hará solicitudes a las rutas de autenticación de Fortify detalladas en esta documentación para autenticar y registrar usuarios.

Si eliges interactuar manualmente con los servicios de autenticación de Laravel en lugar de usar Fortify, puedes hacerlo siguiendo la documentación disponible en la autenticación, restablecimiento de contraseña y verificación de correo electrónico.

Laravel Fortify y Laravel Sanctum

Algunos desarrolladores se confunden respecto a la diferencia entre Laravel Sanctum y Laravel Fortify. Debido a que los dos paquetes resuelven problemas diferentes pero relacionados, Laravel Fortify y Laravel Sanctum no son paquetes mutuamente excluyentes o competidores.

Laravel Sanctum solo se ocupa de gestionar tokens de API y autenticar usuarios existentes mediante cookies de sesión o tokens. Sanctum no proporciona ninguna ruta que maneje el registro de usuarios, restablecimiento de contraseña, etc.

Si estás intentando construir manualmente la capa de autenticación para una aplicación que ofrece una API o sirve como backend para una aplicación de una sola página, es completamente posible que utilices tanto Laravel Fortify (para el registro de usuarios, restablecimiento de contraseña, etc.) como Laravel Sanctum (gestión de tokens de API, autenticación de sesión).

Instalación

Para empezar, instala Fortify usando el gestor de paquetes Composer:

composer require laravel/fortify

A continuación, publica los recursos de Fortify con el comando vendor:publish:

php artisan vendor:publish --provider="Laravel\Fortify\FortifyServiceProvider"

Este comando publicará las acciones de Fortify en tu directorio app/Actions, que se creará si no existe. Además, se publicarán el proveedor de servicios FortifyServiceProvider, el archivo de configuración y todas las migraciones de base de datos necesarias.

A continuación, debes migrar tu base de datos:

php artisan migrate

El Proveedor de Servicios de Fortify

El comando vendor:publish discutido anteriormente también publicará la clase App\Providers\FortifyServiceProvider. Debes asegurarte de que esta clase esté registrada dentro del array providers del archivo de configuración config/app.php de tu aplicación.

El proveedor de servicios de Fortify registra las acciones que Fortify publicó e instruye a Fortify a usarlas cuando sus tareas respectivas son ejecutadas por Fortify.

Características de Fortify

El archivo de configuración fortify contiene una matriz de configuración features. Esta matriz define las rutas/características del backend que Fortify expondrá de forma predeterminada. Si no estás utilizando Fortify en combinación con Laravel Jetstream, recomendamos que solo habilites las siguientes características, que son las funciones básicas de autenticación proporcionadas por la mayoría de las aplicaciones Laravel:

'features' => [
Features::registration(),
Features::resetPasswords(),
Features::emailVerification(),
],

Desactivar Vistas

De forma predeterminada, Fortify define rutas destinadas a devolver vistas, como una pantalla de inicio de sesión o registro. Sin embargo, si estás construyendo una aplicación de página única (SPA) impulsada por JavaScript, es posible que no necesites estas rutas. Por esa razón, puedes deshabilitar completamente estas rutas configurando el valor views en el archivo de configuración config/fortify.php de tu aplicación en false:

'views' => false,

Desactivar Vistas y Restablecimiento de Contraseña

Si eliges deshabilitar las vistas de Fortify y vas a implementar funciones de restablecimiento de contraseña para tu aplicación, aún debes definir una ruta con el nombre password.reset que sea responsable de mostrar la vista "restablecer contraseña" de tu aplicación. Esto es necesario porque la notificación Illuminate\Auth\Notifications\ResetPassword de Laravel generará la URL de restablecimiento de contraseña a través de la ruta con nombre password.reset.

Autenticación

Para comenzar, necesitamos indicarle a Fortify cómo devolver nuestra vista de "inicio de sesión". Recuerda, Fortify es una biblioteca de autenticación sin cabeza. Si deseas una implementación frontend de las funciones de autenticación de Laravel que ya esté completada para ti, debes usar un kit de inicio de aplicación.

Toda la lógica de renderización de la vista de autenticación se puede personalizar utilizando los métodos apropiados disponibles a través de la clase Laravel\Fortify\Fortify. Típicamente, debes llamar a este método desde el método boot de la clase App\Providers\FortifyServiceProvider de tu aplicación. Fortify se encargará de definir la ruta /login que devuelve esta vista:

use Laravel\Fortify\Fortify;
 
/**
* Inicia cualquier servicio de la aplicación.
*/
public function boot(): void
{
Fortify::loginView(function () {
return view('auth.login');
});
 
// ...
}

Tu plantilla de inicio de sesión debe incluir un formulario que haga una solicitud POST a /login. El punto final /login espera un email/username y una password como cadena. El nombre del campo de email/username debe coincidir con el valor username en el archivo de configuración config/fortify.php. Además, se puede proporcionar un campo booleano remember para indicar que el usuario desea utilizar la funcionalidad "recordarme" proporcionada por Laravel.

Si el intento de inicio de sesión tiene éxito, Fortify te redirigirá a la URI configurada mediante la opción home en el archivo de configuración fortify de tu aplicación. Si la solicitud de inicio de sesión fue una solicitud XHR, se devolverá una respuesta HTTP 200.

Si la solicitud no tuvo éxito, el usuario será redirigido nuevamente a la pantalla de inicio de sesión y los errores de validación estarán disponibles para ti a través de la variable compartida $errors de la plantilla Blade. O, en el caso de una solicitud XHR, los errores de validación se devolverán con la respuesta HTTP 422.

Personalizar la Autenticación de Usuario

Fortify recuperará y autenticará automáticamente al usuario en función de las credenciales proporcionadas y el guardia de autenticación configurado para tu aplicación. Sin embargo, a veces es posible que desees tener una personalización completa sobre cómo se autentican las credenciales de inicio de sesión y se recuperan los usuarios. Afortunadamente, Fortify te permite lograr esto fácilmente utilizando el método Fortify::authenticateUsing.

Este método acepta un cierre que recibe la solicitud HTTP entrante. El cierre es responsable de validar las credenciales de inicio de sesión adjuntas a la solicitud y devolver la instancia de usuario asociada. Si las credenciales no son válidas o no se puede encontrar un usuario, el cierre debe devolver null o false. Típicamente, este método debe llamarse desde el método boot de tu FortifyServiceProvider:

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Laravel\Fortify\Fortify;
 
/**
* Inicia cualquier servicio de la aplicación.
*/
public function boot(): void
{
Fortify::authenticateUsing(function (Request $request) {
$user = User::where('email', $request->email)->first();
 
if ($user &&
Hash::check($request->password, $user->password)) {
return $user;
}
});
 
// ...
}

Guardia de Autenticación

Puedes personalizar el guardia de autenticación utilizado por Fortify dentro del archivo de configuración fortify de tu aplicación. Sin embargo, debes asegurarte de que el guardia configurado sea una implementación de Illuminate\Contracts\Auth\StatefulGuard. Si estás intentando usar Laravel Fortify para autenticar una SPA, debes usar el guardia web predeterminado de Laravel en combinación con Laravel Sanctum.

Personalizar la Tubería de Autenticación

Laravel Fortify autentica las solicitudes de inicio de sesión a través de un pipeline de clases invocables. Si lo deseas, puedes definir un pipeline personalizado de clases por el que deban pasar las solicitudes de inicio de sesión. Cada clase debe tener un método __invoke que reciba la instancia entrante de Illuminate\Http\Request y, al igual que middleware, una variable $next que se invoca para pasar la solicitud a la siguiente clase en el pipeline.

Para definir tu pipeline personalizado, puedes usar el método Fortify::authenticateThrough. Este método acepta un cierre que debe devolver la matriz de clases por las que se debe pasar la solicitud de inicio de sesión. Típicamente, este método debe llamarse desde el método boot de tu clase App\Providers\FortifyServiceProvider.

El ejemplo a continuación contiene la definición predeterminada del pipeline que puedes usar como punto de partida al realizar tus propias modificaciones:

use Laravel\Fortify\Actions\AttemptToAuthenticate;
use Laravel\Fortify\Actions\EnsureLoginIsNotThrottled;
use Laravel\Fortify\Actions\PrepareAuthenticatedSession;
use Laravel\Fortify\Actions\RedirectIfTwoFactorAuthenticatable;
use Laravel\Fortify\Fortify;
use Illuminate\Http\Request;
 
Fortify::authenticateThrough(function (Request $request) {
return array_filter([
config('fortify.limiters.login') ? null : EnsureLoginIsNotThrottled::class,
Features::enabled(Features::twoFactorAuthentication()) ? RedirectIfTwoFactorAuthenticatable::class : null,
AttemptToAuthenticate::class,
PrepareAuthenticatedSession::class,
]);
});

Personalizar Redirecciones

Si el intento de inicio de sesión tiene éxito, Fortify te redirigirá a la URI configurada mediante la opción home en el archivo de configuración fortify de tu aplicación. Si la solicitud de inicio de sesión fue una solicitud XHR, se devolverá una respuesta HTTP 200. Después de que un usuario cierre sesión en la aplicación, se redirigirá al usuario a la URI /.

Si necesitas una personalización avanzada de este comportamiento, puedes vincular implementaciones de los contratos LoginResponse y LogoutResponse en el contenedor de servicios de Laravel. Típicamente, esto se debe hacer dentro del método register de la clase App\Providers\FortifyServiceProvider de tu aplicación:

use Laravel\Fortify\Contracts\LogoutResponse;
 
/**
* Registra cualquier servicio de la aplicación.
*/
public function register(): void
{
$this->app->instance(LogoutResponse::class, new class implements LogoutResponse {
public function toResponse($request)
{
return redirect('/');
}
});
}

Autenticación de Dos Factores

Cuando la función de autenticación de dos factores de Fortify está habilitada, se requiere que el usuario ingrese un token numérico de seis dígitos durante el proceso de autenticación. Este token se genera mediante una contraseña de un solo uso basada en el tiempo (TOTP) que se puede obtener desde cualquier aplicación de autenticación móvil compatible con TOTP, como Google Authenticator.

Antes de comenzar, asegúrate de que el modelo App\Models\User de tu aplicación use el rasgo Laravel\Fortify\TwoFactorAuthenticatable:

<?php
 
namespace App\Models;
 
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Fortify\TwoFactorAuthenticatable;
 
class User extends Authenticatable
{
use Notifiable, TwoFactorAuthenticatable;
}

Next, you should build a screen within your application where users can manage their two factor authentication settings. This screen should allow the user to enable and disable two factor authentication, as well as regenerate their two factor authentication recovery codes.

By default, the features array of the fortify configuration file instructs Fortify's two factor authentication settings to require password confirmation before modification. Therefore, your application should implement Fortify's password confirmation feature before continuing.

Enabling Two Factor Authentication

To begin enabling two factor authentication, your application should make a POST request to the /user/two-factor-authentication endpoint defined by Fortify. If the request is successful, the user will be redirected back to the previous URL and the status session variable will be set to two-factor-authentication-enabled. You may detect this status session variable within your templates to display the appropriate success message. If the request was an XHR request, 200 HTTP response will be returned.

After choosing to enable two factor authentication, the user must still "confirm" their two factor authentication configuration by providing a valid two factor authentication code. So, your "success" message should instruct the user that two factor authentication confirmation is still required:

@if (session('status') == 'two-factor-authentication-enabled')
<div class="mb-4 font-medium text-sm">
Please finish configuring two factor authentication below.
</div>
@endif

A continuación, debes mostrar el código QR de autenticación de dos factores para que el usuario lo escanee en su aplicación autenticadora. Si estás utilizando Blade para renderizar el frontend de tu aplicación, puedes recuperar el SVG del código QR utilizando el método twoFactorQrCodeSvg disponible en la instancia del usuario:

$request->user()->twoFactorQrCodeSvg();

Si estás construyendo un frontend con JavaScript, puedes hacer una solicitud GET mediante XHR al endpoint /user/two-factor-qr-code para recuperar el código QR de autenticación de dos factores del usuario. Este endpoint devolverá un objeto JSON que contiene una clave svg.

Confirmar Autenticación de Dos Factores

Además de mostrar el código QR de autenticación de dos factores del usuario, debes proporcionar un campo de texto donde el usuario pueda ingresar un código de autenticación válido para "confirmar" su configuración de autenticación de dos factores. Este código debe enviarse a la aplicación Laravel mediante una solicitud POST al endpoint /user/confirmed-two-factor-authentication definido por Fortify.

Si la solicitud es exitosa, el usuario será redirigido de nuevo a la URL anterior y la variable de sesión status se establecerá en two-factor-authentication-confirmed:

@if (session('status') == 'two-factor-authentication-confirmed')
<div class="mb-4 font-medium text-sm">
Two factor authentication confirmed and enabled successfully.
</div>
@endif

Si la solicitud al endpoint de confirmación de autenticación de dos factores se realizó mediante una solicitud XHR, se devolverá una respuesta HTTP 200.

Mostrar los Códigos de Recuperación

También debes mostrar los códigos de recuperación de dos factores del usuario. Estos códigos de recuperación permiten al usuario autenticarse si pierde el acceso a su dispositivo móvil. Si estás utilizando Blade para renderizar el frontend de tu aplicación, puedes acceder a los códigos de recuperación mediante la instancia autenticada del usuario:

(array) $request->user()->recoveryCodes()

Si estás construyendo un frontend con JavaScript, puedes hacer una solicitud GET mediante XHR al endpoint /user/two-factor-recovery-codes. Este endpoint devolverá un array JSON que contiene los códigos de recuperación del usuario.

Para regenerar los códigos de recuperación del usuario, tu aplicación debe hacer una solicitud POST al endpoint /user/two-factor-recovery-codes.

Autenticación con Autenticación de Dos Factores

Durante el proceso de autenticación, Fortify redirigirá automáticamente al usuario a la pantalla de desafío de autenticación de dos factores de tu aplicación. Sin embargo, si tu aplicación está realizando una solicitud de inicio de sesión mediante XHR, la respuesta JSON devuelta después de un intento de autenticación exitoso contendrá un objeto JSON con una propiedad booleana two_factor. Debes inspeccionar este valor para saber si debes redirigir a la pantalla de desafío de autenticación de dos factores de tu aplicación.

Para comenzar a implementar la funcionalidad de autenticación de dos factores, debemos indicarle a Fortify cómo devolver nuestra vista de desafío de autenticación de dos factores. Toda la lógica de renderización de vistas de autenticación de Fortify se puede personalizar mediante los métodos apropiados disponibles a través de la clase Laravel\Fortify\Fortify. Típicamente, debes llamar a este método desde el método boot de la clase App\Providers\FortifyServiceProvider de tu aplicación:

use Laravel\Fortify\Fortify;
 
/**
* Inicia cualquier servicio de la aplicación.
*/
public function boot(): void
{
Fortify::twoFactorChallengeView(function () {
return view('auth.two-factor-challenge');
});
 
// ...
}

Fortify se encargará de definir la ruta /two-factor-challenge que devuelve esta vista. Tu plantilla two-factor-challenge debe incluir un formulario que haga una solicitud POST al endpoint /two-factor-challenge. La acción /two-factor-challenge espera un campo code que contenga un token TOTP válido o un campo recovery_code que contenga uno de los códigos de recuperación del usuario.

Si el intento de inicio de sesión tiene éxito, Fortify redirigirá al usuario a la URI configurada mediante la opción home en el archivo de configuración fortify de tu aplicación. Si la solicitud fue una solicitud XHR, se devolverá una respuesta HTTP 204.

Si la solicitud no tuvo éxito, el usuario será redirigido de nuevo a la pantalla de desafío de autenticación de dos factores y los errores de validación estarán disponibles para ti mediante la variable compartida $errors de la plantilla Blade. O, en el caso de una solicitud XHR, los errores de validación se devolverán con una respuesta HTTP 422.

Desactivar Autenticación de Dos Factores

Para deshabilitar la autenticación de dos factores, tu aplicación debe realizar una solicitud DELETE al endpoint /user/two-factor-authentication. Recuerda que los endpoints de autenticación de dos factores de Fortify requieren confirmación de contraseña antes de ser llamados.

Registro

Para comenzar a implementar la funcionalidad de registro de nuestra aplicación, debemos indicarle a Fortify cómo devolver nuestra vista de "registro". Recuerda, Fortify es una biblioteca de autenticación sin cabeza. Si deseas una implementación frontend de las funciones de autenticación de Laravel que ya esté completada para ti, debes usar un kit de inicio de aplicación.

Toda la lógica de renderización de vistas de Fortify se puede personalizar mediante los métodos apropiados disponibles a través de la clase Laravel\Fortify\Fortify. Típicamente, debes llamar a este método desde el método boot de tu clase App\Providers\FortifyServiceProvider:

use Laravel\Fortify\Fortify;
 
/**
* Inicia cualquier servicio de la aplicación.
*/
public function boot(): void
{
Fortify::registerView(function () {
return view('auth.register');
});
 
// ...
}

Fortify se encargará de definir la ruta /register que devuelve esta vista. Tu plantilla register debe incluir un formulario que haga una solicitud POST al endpoint /register definido por Fortify.

El endpoint /register espera campos name de tipo string, dirección de correo electrónico / nombre de usuario de tipo string, campos password y password_confirmation. El nombre del campo de correo electrónico / nombre de usuario debe coincidir con el valor de configuración username definido en el archivo de configuración fortify de tu aplicación.

Si el intento de registro tiene éxito, Fortify redirigirá al usuario a la URI configurada mediante la opción home en el archivo de configuración fortify de tu aplicación. Si la solicitud fue una solicitud XHR, se devolverá una respuesta HTTP 201.

Si la solicitud no tuvo éxito, el usuario será redirigido de nuevo a la pantalla de registro y los errores de validación estarán disponibles para ti mediante la variable compartida $errors de la plantilla Blade. O, en el caso de una solicitud XHR, los errores de validación se devolverán con una respuesta HTTP 422.

Personalizar el Registro

El proceso de validación y creación de usuarios se puede personalizar modificando la acción App\Actions\Fortify\CreateNewUser que se generó cuando instalaste Laravel Fortify.

Restablecimiento de Contraseña

Solicitar Enlace de Restablecimiento de Contraseña

Para comenzar a implementar la funcionalidad de restablecimiento de contraseña de nuestra aplicación, debemos indicarle a Fortify cómo devolver nuestra vista de "olvidé mi contraseña". Recuerda, Fortify es una biblioteca de autenticación sin cabeza. Si deseas una implementación frontend de las funciones de autenticación de Laravel que ya esté completada para ti, debes usar un kit de inicio de aplicación.

Toda la lógica de renderización de vistas de Fortify se puede personalizar mediante los métodos apropiados disponibles a través de la clase Laravel\Fortify\Fortify. Típicamente, debes llamar a este método desde el método boot de tu clase App\Providers\FortifyServiceProvider:

use Laravel\Fortify\Fortify;
 
/**
* Inicia cualquier servicio de la aplicación.
*/
public function boot(): void
{
Fortify::requestPasswordResetLinkView(function () {
return view('auth.forgot-password');
});
 
// ...
}

Fortify se encargará de definir el endpoint /forgot-password que devuelve esta vista. Tu plantilla forgot-password debe incluir un formulario que haga una solicitud POST al endpoint /forgot-password.

El endpoint /forgot-password espera un campo de tipo string llamado email. El nombre de este campo/columna de la base de datos debe coincidir con el valor de configuración email en el archivo de configuración fortify de tu aplicación.

Manejo de la Respuesta de Solicitud de Enlace de Restablecimiento de Contraseña

Si la solicitud de enlace para restablecer la contraseña fue exitosa, Fortify redirigirá al usuario de nuevo al endpoint /forgot-password y enviará un correo electrónico al usuario con un enlace seguro que pueden utilizar para restablecer su contraseña. Si la solicitud fue una solicitud XHR, se devolverá una respuesta HTTP 200.

Después de ser redirigido de nuevo al endpoint /forgot-password después de una solicitud exitosa, la variable de sesión $status se puede usar para mostrar el estado del intento de solicitud de enlace para restablecer la contraseña.

El valor de la variable de sesión $status coincidirá con una de las cadenas de traducción definidas en el archivo de idioma passwords de tu aplicación. Si deseas personalizar este valor y no has publicado los archivos de idioma de Laravel, puedes hacerlo mediante el comando Artisan lang:publish:

@if (session('status'))
<div class="mb-4 font-medium text-sm text-green-600">
{{ session('status') }}
</div>
@endif

Si la solicitud no fue exitosa, el usuario será redirigido de nuevo a la pantalla de solicitud de enlace para restablecer la contraseña y los errores de validación estarán disponibles para ti mediante la variable compartida $errors de la plantilla Blade. O, en el caso de una solicitud XHR, los errores de validación se devolverán con una respuesta HTTP 422.

Restablecer la Contraseña

Para finalizar la implementación de la funcionalidad de restablecimiento de contraseña de nuestra aplicación, debemos indicarle a Fortify cómo devolver nuestra vista de "restablecer contraseña".

Toda la lógica de renderización de vistas de Fortify se puede personalizar mediante los métodos apropiados disponibles a través de la clase Laravel\Fortify\Fortify. Típicamente, debes llamar a este método desde el método boot de tu clase App\Providers\FortifyServiceProvider:

use Laravel\Fortify\Fortify;
use Illuminate\Http\Request;
 
/**
* Inicia cualquier servicio de la aplicación.
*/
public function boot(): void
{
Fortify::resetPasswordView(function (Request $request) {
return view('auth.reset-password', ['request' => $request]);
});
 
// ...
}

Fortify se encargará de definir la ruta para mostrar esta vista. Tu plantilla reset-password debe incluir un formulario que haga una solicitud POST a /reset-password.

El endpoint /reset-password espera un campo de tipo string llamado email, un campo password, un campo password_confirmation y un campo oculto llamado token que contiene el valor de request()->route('token'). El nombre del campo "email" / columna de la base de datos debe coincidir con el valor de configuración email definido en el archivo de configuración fortify de tu aplicación.

Manejo de la Respuesta de Restablecimiento de Contraseña

Si la solicitud de restablecimiento de contraseña fue exitosa, Fortify redirigirá de nuevo a la ruta /login para que el usuario pueda iniciar sesión con su nueva contraseña. Además, se establecerá una variable de sesión status para que puedas mostrar el estado exitoso del restablecimiento en tu pantalla de inicio de sesión:

@if (session('status'))
<div class="mb-4 font-medium text-sm text-green-600">
{{ session('status') }}
</div>
@endif

Si la solicitud fue una solicitud XHR, se devolverá una respuesta HTTP 200.

Si la solicitud no fue exitosa, el usuario será redirigido de nuevo a la pantalla de restablecimiento de contraseña y los errores de validación estarán disponibles para ti mediante la variable compartida $errors de la plantilla Blade. O, en el caso de una solicitud XHR, los errores de validación se devolverán con una respuesta HTTP 422.

Personalizar Restablecimientos de Contraseña

El proceso de restablecimiento de contraseña se puede personalizar modificando la acción App\Actions\ResetUserPassword que se generó cuando instalaste Laravel Fortify.

Verificación de Correo Electrónico

Después del registro, es posible que desees que los usuarios verifiquen su dirección de correo electrónico antes de seguir accediendo a tu aplicación. Para comenzar, asegúrate de que la característica emailVerification esté habilitada en el array features del archivo de configuración fortify de tu aplicación. Además, debes asegurarte de que la clase App\Models\User implemente la interfaz Illuminate\Contracts\Auth\MustVerifyEmail.

Una vez completados estos dos pasos de configuración, los usuarios recién registrados recibirán un correo electrónico que les pedirá que verifiquen la propiedad de su dirección de correo electrónico. Sin embargo, necesitamos informarle a Fortify cómo mostrar la pantalla de verificación de correo electrónico que informa al usuario que debe hacer clic en el enlace de verificación en el correo electrónico.

Toda la lógica de renderización de vistas de Fortify se puede personalizar mediante los métodos apropiados disponibles a través de la clase Laravel\Fortify\Fortify. Típicamente, debes llamar a este método desde el método boot de tu clase App\Providers\FortifyServiceProvider:

use Laravel\Fortify\Fortify;
 
/**
* Inicia cualquier servicio de la aplicación.
*/
public function boot(): void
{
Fortify::verifyEmailView(function () {
return view('auth.verify-email');
});
 
// ...
}

Fortify se encargará de definir la ruta que muestra esta vista cuando un usuario es redirigido al endpoint /email/verify por el middleware incorporado verified de Laravel.

Tu plantilla verify-email debe incluir un mensaje informativo que instruya al usuario a hacer clic en el enlace de verificación de correo electrónico que se envió a su dirección de correo electrónico.

Reenvío de Enlaces de Verificación de Correo Electrónico

Si lo deseas, puedes agregar un botón a la plantilla verify-email de tu aplicación que active una solicitud POST al endpoint /email/verification-notification. Cuando este endpoint recibe una solicitud, se enviará un nuevo enlace de verificación por correo electrónico al usuario, permitiéndole obtener un nuevo enlace de verificación si el anterior fue eliminado o perdido accidentalmente.

Si la solicitud para reenviar el correo electrónico del enlace de verificación fue exitosa, Fortify redirigirá al usuario de nuevo al endpoint /email/verify con una variable de sesión status, permitiéndote mostrar un mensaje informativo al usuario informándole que la operación fue exitosa. Si la solicitud fue una solicitud XHR, se devolverá una respuesta HTTP 202:

@if (session('status') == 'verification-link-sent')
<div class="mb-4 font-medium text-sm text-green-600">
A new email verification link has been emailed to you!
</div>
@endif

Proteger Rutas

Para especificar que una ruta o grupo de rutas requiere que el usuario haya verificado su dirección de correo electrónico, debes adjuntar el middleware incorporado verified de Laravel a la ruta. Este middleware está registrado dentro de la clase App\Http\Kernel de tu aplicación:

Route::get('/dashboard', function () {
// ...
})->middleware(['verified']);

Confirmación de Contraseña

Al construir tu aplicación, es posible que en ocasiones tengas acciones que requieran que el usuario confirme su contraseña antes de que se realice la acción. Normalmente, estas rutas están protegidas por el middleware incorporado password.confirm de Laravel.

Para comenzar a implementar la funcionalidad de confirmación de contraseña, debemos indicarle a Fortify cómo devolver la "vista de confirmación de contraseña" de nuestra aplicación. Recuerda, Fortify es una biblioteca de autenticación sin cabeza. Si deseas una implementación frontend de las funciones de autenticación de Laravel que ya esté completada para ti, deberías usar un kit de inicio de aplicación.

Toda la lógica de renderización de vistas de Fortify se puede personalizar mediante los métodos apropiados disponibles a través de la clase Laravel\Fortify\Fortify. Típicamente, deberías llamar a este método desde el método boot de la clase App\Providers\FortifyServiceProvider de tu aplicación:

use Laravel\Fortify\Fortify;
 
/**
* Inicia cualquier servicio de la aplicación.
*/
public function boot(): void
{
Fortify::confirmPasswordView(function () {
return view('auth.confirm-password');
});
 
// ...
}

Fortify se encargará de definir el endpoint /user/confirm-password que devuelve esta vista. Tu plantilla confirm-password debe incluir un formulario que haga una solicitud POST al endpoint /user/confirm-password. El endpoint /user/confirm-password espera un campo password que contenga la contraseña actual del usuario.

Si la contraseña coincide con la contraseña actual del usuario, Fortify redirigirá al usuario a la ruta a la que intentaba acceder. Si la solicitud fue una solicitud XHR, se devolverá una respuesta HTTP 201.

Si la solicitud no fue exitosa, el usuario será redirigido de nuevo a la pantalla de confirmación de contraseña y los errores de validación estarán disponibles para ti mediante la variable compartida $errors de la plantilla Blade. O, en el caso de una solicitud XHR, los errores de validación se devolverán con una respuesta HTTP 422.