Inicio > Desarrollo Web > Tutoriales de Laravel > Guía completa sobre autenticación en Laravel 11 con JWT y Sanctum

Guía completa sobre autenticación en Laravel 11 con JWT y Sanctum

Diego Cortés
Diego Cortés
January 20, 2025
Guía completa sobre autenticación en Laravel 11 con JWT y Sanctum

La autenticación en aplicaciones web es un aspecto crucial para garantizar la seguridad y la protección de datos de los usuarios. Laravel 11 ofrece varias opciones para implementar la autenticación, siendo JWT (JSON Web Tokens) y Sanctum dos de las más populares. En este artículo, exploraremos cómo implementar estos métodos en Laravel 11, brindando una guía clara y comprensible.

¿Qué es JWT?

JWT, o JSON Web Tokens, es un estándar abierto que permite la transmisión segura de información entre partes como un objeto JSON. Este token se utiliza comúnmente para autenticar solicitudes y autorizar el acceso a recursos específicos. Al utilizar JWT, la información del usuario se codifica en un formato legible para el servidor, lo que permite verificar la identidad sin necesidad de sesiones en el servidor.

¿Qué es Sanctum?

Sanctum es un paquete de Laravel diseñado para la autenticación de aplicaciones SPA (Single Page Applications) y APIs. A diferencia de Passport, que utiliza OAuth2, Sanctum ofrece una forma sencilla de autenticación usando tokens de API, ideal para aplicaciones más livianas y servicios web.

Configuración de JWT en Laravel 11

Para implementar JWT en Laravel 11, primero es necesario instalar el paquete tymon/jwt-auth. Esto se realiza utilizando Composer con el siguiente comando:

composer require tymon/jwt-auth

Una vez instalado, debes publicar la configuración del paquete ejecutando:

php artisan vendor:publish --provider="Tymon\JWTAuth\JWTAuthServiceProvider"

Esto generará un archivo de configuración config/jwt.php. A continuación, se recomienda generar una clave secreta para el JWT:

php artisan jwt:secret

Con esto, se completan los pasos de instalación y configuración. Ahora, se debe crear la lógica para la autenticación de usuarios, que en general incluye la creación de un controlador que gestionará el registro y el inicio de sesión. Un ejemplo simple de método de inicio de sesión podría ser:

public function login(Request $request)
{
    $credentials = $request->only('email', 'password');

    if (!$token = auth()->attempt($credentials)) {
        return response()->json(['error' => 'Unauthorized'], 401);
    }

    return response()->json(['token' => $token]);
}

Configuración de Sanctum en Laravel 11

Para utilizar Sanctum, primero debes instalarlo también con Composer:

composer require laravel/sanctum

Después de la instalación, publica la configuración ejecutando:

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

A continuación, asegúrate de añadir el middleware de Sanctum en tu archivo api.php:

Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,

Esto permitirá que Sanctum maneje la autenticación de las solicitudes desde el cliente. Finalmente, para autenticar a un usuario, puedes crear un controlador similar al de JWT, utilizando createToken para generar un token de acceso:

public function login(Request $request)
{
    $credentials = $request->only('email', 'password');

    if (Auth::attempt($credentials)) {
        $user = Auth::user();
        $token = $user->createToken('API Token')->plainTextToken;
        return response()->json(['token' => $token]);
    }

    return response()->json(['error' => 'Unauthorized'], 401);
}

Conclusiones

Tanto JWT como Sanctum son poderosas opciones que Laravel 11 ofrece para la autenticación de usuarios en aplicaciones web. Cada una tiene sus características y es ideal para diferentes tipos de aplicaciones. La elección entre JWT y Sanctum dependerá de los requisitos específicos de tu proyecto.

Si deseas profundizar más sobre este tema y estar al tanto de las últimas novedades sobre Laravel y desarrollo web, te invito a leer más noticias de este estilo en mi blog.

Diego Cortés
Diego Cortés
Full Stack Developer, SEO Specialist with Expertise in Laravel & Vue.js and 3D Generalist

Categorías

Page loaded in 26.62 ms