Estamos actualizando el sitio. Durante unos días es posible que veas fallos de diseño o de traducción. La documentación sigue disponible: si una página se ve mal, recárgala más tarde.

Inicio Laravel 10.x Laravel Fortify

Laravel Fortify

10.x 7 de mar. de 2026

#Introducción

Laravel Fortify es una implementación backend de autenticación independiente del frontend 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, puede ejecutar el comando Artisan route:list para ver las rutas que Fortify ha registrado.

Dado que Fortify no proporciona su propia interfaz de usuario, está pensado para ser usado junto con su propia interfaz de usuario que realice solicitudes a las rutas que registra. En el resto de esta documentación discutiremos exactamente cómo hacer solicitudes a estas rutas.

Примечание

Recuerde, Fortify es un paquete diseñado para darle un punto de partida en la implementación de las características de autenticación de Laravel. No está obligado a usarlo. Siempre puede interactuar manualmente con los servicios de autenticación de Laravel siguiendo la documentación disponible en authentication, password reset y email verification.

#¿Qué es Fortify?

Como se mencionó anteriormente, Laravel Fortify es una implementación backend de autenticación independiente del frontend 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á obligado a usar Fortify para utilizar las características de autenticación de Laravel. Siempre puede interactuar manualmente con los servicios de autenticación de Laravel siguiendo la documentación disponible en authentication, password reset y email verification.

Si es nuevo en Laravel, puede que desee explorar el kit de inicio de aplicación Laravel Breeze antes de intentar usar Laravel Fortify. Laravel Breeze proporciona un andamiaje de autenticación para su aplicación que incluye una interfaz de usuario construida con Tailwind CSS. A diferencia de Fortify, Breeze publica sus rutas y controladores directamente en su aplicación. Esto le permite estudiar y familiarizarse con las características de autenticación de Laravel antes de permitir que Laravel Fortify implemente estas características por usted.

Laravel Fortify esencialmente toma las rutas y controladores de Laravel Breeze y los ofrece como un paquete que no incluye una interfaz de usuario. Esto le permite crear rápidamente la implementación backend de la capa de autenticación de su aplicación sin estar atado a ninguna opinión particular de frontend.

#¿Cuándo debo usar Fortify?

Puede que se pregunte cuándo es apropiado usar Laravel Fortify. Primero, si está usando uno de los kits de inicio de aplicación de Laravel, no necesita 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á usando un kit de inicio de aplicación y su aplicación necesita características de autenticación, tiene dos opciones: implementar manualmente las características de autenticación de su aplicación o usar Laravel Fortify para proporcionar la implementación backend de estas características.

Si decide instalar Fortify, su interfaz de usuario realizará solicitudes a las rutas de autenticación de Fortify que se detallan en esta documentación para autenticar y registrar usuarios.

Si decide interactuar manualmente con los servicios de autenticación de Laravel en lugar de usar Fortify, puede hacerlo siguiendo la documentación disponible en authentication, password reset y email verification.

#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 ni competidores.

Laravel Sanctum se ocupa únicamente de gestionar tokens API y autenticar usuarios existentes usando cookies de sesión o tokens. Sanctum no proporciona rutas para manejar registro de usuarios, restablecimiento de contraseña, etc.

Si está 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 totalmente posible que utilice tanto Laravel Fortify (para registro de usuarios, restablecimiento de contraseña, etc.) como Laravel Sanctum (gestión de tokens API, autenticación de sesión).

#Instalación

Para comenzar, instale Fortify usando el gestor de paquetes Composer:

composer require laravel/fortify

A continuación, publique los recursos de Fortify usando el comando vendor:publish:

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

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

Luego, debe migrar su base de datos:

php artisan migrate

#El proveedor de servicios Fortify

El comando vendor:publish mencionado anteriormente también publicará la clase App\Providers\FortifyServiceProvider. Debe asegurarse de que esta clase esté registrada dentro del arreglo providers en el archivo de configuración config/app.php de su aplicación.

El proveedor de servicios Fortify registra las acciones que Fortify publicó e indica a Fortify que las use cuando se ejecuten sus respectivas tareas.

#Características de Fortify

El archivo de configuración fortify contiene un arreglo de configuración features. Este arreglo define qué rutas / características backend Fortify expondrá por defecto. Si no está usando Fortify en combinación con Laravel Jetstream, recomendamos que solo habilite las siguientes características, que son las características básicas de autenticación proporcionadas por la mayoría de las aplicaciones Laravel:

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

#Deshabilitar vistas

Por defecto, Fortify define rutas que están destinadas a devolver vistas, como una pantalla de inicio de sesión o de registro. Sin embargo, si está construyendo una aplicación de una sola página impulsada por JavaScript, puede que no necesite estas rutas. Por esa razón, puede deshabilitar estas rutas completamente configurando el valor views en el archivo de configuración config/fortify.php de su aplicación a false:

'views' => false,

#Deshabilitar vistas y restablecimiento de contraseña

Si decide deshabilitar las vistas de Fortify y va a implementar funciones de restablecimiento de contraseña para su aplicación, aún debe definir una ruta llamada password.reset que sea responsable de mostrar la vista de "restablecer contraseña" de su 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 nombrada password.reset.

#Autenticación

Para comenzar, necesitamos indicarle a Fortify cómo devolver nuestra vista de "login". Recuerde, Fortify es una biblioteca de autenticación sin frontend. Si desea una implementación frontend de las características de autenticación de Laravel ya completadas para usted, debe usar un kit de inicio de aplicación.

Toda la lógica de renderizado de las vistas de autenticación puede personalizarse usando los métodos apropiados disponibles a través de la clase Laravel\Fortify\Fortify. Normalmente, debe llamar a este método desde el método boot de la clase App\Providers\FortifyServiceProvider de su aplicación. Fortify se encargará de definir la ruta /login que devuelve esta vista:

use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Fortify::loginView(function () {
        return view('auth.login');
    });

    // ...
}

Su plantilla de login debe incluir un formulario que haga una solicitud POST a /login. El endpoint /login espera un string email / username y una password. El nombre del campo de email / username debe coincidir con el valor username dentro del archivo de configuración config/fortify.php. Además, se puede proporcionar un campo booleano remember para indicar que el usuario desea usar la funcionalidad "recordarme" que Laravel proporciona.

Si el intento de inicio de sesión es exitoso, Fortify lo redirigirá a la URI configurada mediante la opción home en el archivo de configuración fortify de su aplicación. Si la solicitud de inicio de sesión fue una solicitud XHR, se devolverá una respuesta HTTP 200.

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

#Personalización de la autenticación de usuarios

Fortify recuperará y autenticará automáticamente al usuario basado en las credenciales proporcionadas y el guardia de autenticación configurado para su aplicación. Sin embargo, a veces puede desear tener una personalización completa sobre cómo se autentican las credenciales de inicio de sesión y cómo se recuperan los usuarios. Afortunadamente, Fortify le permite lograr esto fácilmente usando el método Fortify::authenticateUsing.

Este método acepta un closure que recibe la solicitud HTTP entrante. El closure 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 son inválidas o no se encuentra ningún usuario, el closure debe devolver null o false. Normalmente, este método debe ser llamado desde el método boot de su FortifyServiceProvider:

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
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

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

#Personalización del pipeline de autenticación

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

Para definir su pipeline personalizado, puede usar el método Fortify::authenticateThrough. Este método acepta un closure que debe devolver el arreglo de clases por las que debe pasar la solicitud de inicio de sesión. Normalmente, este método debe ser llamado desde el método boot de la clase App\Providers\FortifyServiceProvider de su aplicación.

El siguiente ejemplo contiene la definición del pipeline por defecto que puede usar como punto de partida para hacer sus 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,
    ]);
});

#Personalización de redirecciones

Si el intento de inicio de sesión es exitoso, Fortify lo redirigirá a la URI configurada mediante la opción home en el archivo de configuración fortify de su 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, será redirigido a la URI /.

Si necesita una personalización avanzada de este comportamiento, puede enlazar implementaciones de los contratos LoginResponse y LogoutResponse en el contenedor de servicios de Laravel. Normalmente, esto debe hacerse dentro del método register de la clase App\Providers\FortifyServiceProvider de su aplicación:

use Laravel\Fortify\Contracts\LogoutResponse;

/**
 * Register any application services.
 */
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 usando una contraseña de un solo uso basada en tiempo (TOTP) que puede obtenerse desde cualquier aplicación móvil compatible con TOTP, como Google Authenticator.

Antes de comenzar, debe asegurarse primero de que el modelo App\Models\User de su aplicación use el trait 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

Luego, debe mostrar el código QR de autenticación de dos factores para que el usuario lo escanee en su aplicación autenticadora. Si está usando Blade para renderizar el frontend de su aplicación, puede obtener el SVG del código QR usando el método twoFactorQrCodeSvg disponible en la instancia del usuario:

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

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

#Confirmación de la autenticación de dos factores

Además de mostrar el código QR de autenticación de dos factores del usuario, debe proporcionar un campo de texto donde el usuario pueda suministrar 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 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 debe mostrar los códigos de recuperación de autenticación de dos factores del usuario. Estos códigos permiten al usuario autenticarse si pierde acceso a su dispositivo móvil. Si está usando Blade para renderizar el frontend de su aplicación, puede acceder a los códigos de recuperación a través de la instancia del usuario autenticado:

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

Si está construyendo un frontend impulsado por JavaScript, puede hacer una solicitud XHR GET al endpoint /user/two-factor-recovery-codes. Este endpoint devolverá un arreglo JSON con los códigos de recuperación del usuario.

Para regenerar los códigos de recuperación del usuario, su 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 su aplicación. Sin embargo, si su aplicación está haciendo una solicitud de inicio de sesión XHR, la respuesta JSON devuelta después de un intento exitoso de autenticación contendrá un objeto JSON que tiene una propiedad booleana two_factor. Debe inspeccionar este valor para saber si debe redirigir a la pantalla de desafío de autenticación de dos factores de su aplicación.

Para comenzar a implementar la funcionalidad de autenticación de dos factores, necesitamos indicarle a Fortify cómo devolver nuestra vista de desafío de autenticación de dos factores. Toda la lógica de renderizado de vistas de Fortify puede personalizarse usando los métodos apropiados disponibles a través de la clase Laravel\Fortify\Fortify. Normalmente, debe llamar a este método desde el método boot de la clase App\Providers\FortifyServiceProvider de su aplicación:

use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
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. Su 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 es exitoso, Fortify redirigirá al usuario a la URI configurada mediante la opción home en el archivo de configuración fortify de su aplicación. Si la solicitud de inicio de sesión fue una solicitud XHR, se devolverá una respuesta HTTP 204.

Si la solicitud no fue exitosa, el usuario será redirigido de vuelta a la pantalla de desafío de dos factores y los errores de validación estarán disponibles a través de la variable compartida $errors en la plantilla Blade. O, en el caso de una solicitud XHR, los errores de validación se devolverán con una respuesta HTTP 422.

#Deshabilitar autenticación de dos factores

Para deshabilitar la autenticación de dos factores, su aplicación debe hacer una solicitud DELETE al endpoint /user/two-factor-authentication. Recuerde 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, necesitamos indicarle a Fortify cómo devolver nuestra vista de "registro". Recuerde, Fortify es una biblioteca de autenticación sin frontend. Si desea una implementación frontend de las características de autenticación de Laravel ya completadas para usted, debe usar un kit de inicio de aplicación.

Toda la lógica de renderizado de vistas de Fortify puede personalizarse usando los métodos apropiados disponibles a través de la clase Laravel\Fortify\Fortify. Normalmente, debe llamar a este método desde el método boot de la clase App\Providers\FortifyServiceProvider de su aplicación:

use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Fortify::registerView(function () {
        return view('auth.register');
    });

    // ...
}

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

El endpoint /register espera campos string name, dirección de correo electrónico / nombre de usuario string, 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 su aplicación.

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

Si la solicitud no fue exitosa, el usuario será redirigido de vuelta a la pantalla de registro y los errores de validación estarán disponibles a través de la variable compartida $errors en la plantilla Blade. O, en el caso de una solicitud XHR, los errores de validación se devolverán con una respuesta HTTP 422.

#Personalización del registro

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

Para comenzar a implementar la funcionalidad de restablecimiento de contraseña de nuestra aplicación, necesitamos indicarle a Fortify cómo devolver nuestra vista de "olvidé mi contraseña". Recuerde, Fortify es una biblioteca de autenticación sin frontend. Si desea una implementación frontend de las características de autenticación de Laravel ya completadas para usted, debe usar un kit de inicio de aplicación.

Toda la lógica de renderizado de vistas de Fortify puede personalizarse usando los métodos apropiados disponibles a través de la clase Laravel\Fortify\Fortify. Normalmente, debe llamar a este método desde el método boot de la clase App\Providers\FortifyServiceProvider de su aplicación:

use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
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. Su plantilla forgot-password debe incluir un formulario que haga una solicitud POST al endpoint /forgot-password.

El endpoint /forgot-password espera un campo string email. El nombre de este campo / columna de base de datos debe coincidir con el valor de configuración email dentro del archivo de configuración fortify de su aplicación.

#Manejo de la respuesta a la solicitud de enlace para restablecer contraseña

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

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

El valor de la variable de sesión $status coincidirá con una de las cadenas de traducción definidas en el passwords archivo de idioma de su aplicación. Si desea personalizar este valor y no ha publicado los archivos de idioma de Laravel, puede 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 vuelta a la pantalla de solicitud de enlace para restablecer contraseña y los errores de validación estarán disponibles a través de la variable compartida $errors en 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 terminar de implementar la funcionalidad de restablecimiento de contraseña de nuestra aplicación, necesitamos indicarle a Fortify cómo devolver nuestra vista de "restablecer contraseña".

Toda la lógica de renderizado de vistas de Fortify puede personalizarse usando los métodos apropiados disponibles a través de la clase Laravel\Fortify\Fortify. Normalmente, debe llamar a este método desde el método boot de la clase App\Providers\FortifyServiceProvider de su aplicación:

use Laravel\Fortify\Fortify;
use Illuminate\Http\Request;

/**
 * Bootstrap any application services.
 */
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. Su plantilla reset-password debe incluir un formulario que haga una solicitud POST a /reset-password.

El endpoint /reset-password espera un campo string 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 base de datos debe coincidir con el valor de configuración email definido en el archivo de configuración fortify de su aplicación.

#Manejo de la respuesta al restablecimiento de contraseña

Si la solicitud de restablecimiento de contraseña fue exitosa, Fortify redirigirá de vuelta 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 pueda mostrar el estado exitoso del restablecimiento en su 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 vuelta a la pantalla de restablecimiento de contraseña y los errores de validación estarán disponibles a través de la variable compartida $errors en la plantilla Blade. O, en el caso de una solicitud XHR, los errores de validación se devolverán con una respuesta HTTP 422.

#Personalización del restablecimiento de contraseña

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

Después del registro, puede que desee que los usuarios verifiquen su dirección de correo electrónico antes de continuar accediendo a su aplicación. Para comenzar, asegúrese de que la característica emailVerification esté habilitada en el arreglo features del archivo de configuración fortify. Luego, debe asegurarse de que su clase App\Models\User implemente la interfaz Illuminate\Contracts\Auth\MustVerifyEmail.

Una vez completados estos dos pasos, los usuarios recién registrados recibirán un correo electrónico solicitándoles verificar la propiedad de su dirección de correo electrónico. Sin embargo, necesitamos indicarle 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 renderizado de vistas de Fortify puede personalizarse usando los métodos apropiados disponibles a través de la clase Laravel\Fortify\Fortify. Normalmente, debe llamar a este método desde el método boot de la clase App\Providers\FortifyServiceProvider de su aplicación:

use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
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.

Su 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.

#Reenviar enlaces de verificación de correo electrónico

Si lo desea, puede agregar un botón a la plantilla verify-email de su aplicación que dispare 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 enlace de verificación fue exitosa, Fortify redirigirá al usuario de vuelta al endpoint /email/verify con una variable de sesión status, permitiéndole mostrar un mensaje informativo al usuario indicando 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

#Protección de rutas

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

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

Confirmación de contraseña

Mientras construye su aplicación, puede que ocasionalmente tenga 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, necesitamos indicarle a Fortify cómo devolver la vista de "confirmación de contraseña" de nuestra aplicación. Recuerde, Fortify es una biblioteca de autenticación sin frontend. Si desea una implementación frontend de las características de autenticación de Laravel ya completadas para usted, debe usar un kit de inicio de aplicación.

Toda la lógica de renderizado de vistas de Fortify puede personalizarse usando los métodos apropiados disponibles a través de la clase Laravel\Fortify\Fortify. Normalmente, debe llamar a este método desde el método boot de la clase App\Providers\FortifyServiceProvider de su aplicación:

use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
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. Su 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 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 vuelta a la pantalla de confirmación de contraseña y los errores de validación estarán disponibles a través de la variable compartida $errors en la plantilla Blade. O, en el caso de una solicitud XHR, los errores de validación se devolverán con una respuesta HTTP 422.