Inicio » Blog »

21 febrero, 2025

Autenticación Segura con JWT en React y Laravel

#Laravel #React Js

Autenticación segura utilizando JSON Web Tokens JWT en aplicaciones que combinan React como frontend y Laravel como backend. Esta guía cubre la configuración del backend

Autenticación Segura con JWT en React y Laravel

Suscríbete a nuestro canal en Youtube

Suscríbirse

La autenticación es un componente esencial en cualquier aplicación web moderna, y el uso de JSON Web Tokens (JWT) ofrece una forma segura y eficiente de gestionar la autenticación entre el frontend (React) y el backend (Laravel). En este artículo, exploraremos cómo implementar una autenticación segura utilizando JWT en una aplicación que combina React como frontend y Laravel como backend

¿Qué es JWT y por qué usarlo?

JWT (JSON Web Token) es un estándar abierto (RFC 7519) que permite transmitir información de forma segura entre dos partes. Los tokens generados con JWT son compactos, autocontenidos y se pueden verificar fácilmente

En aplicaciones React y Laravel, JWT es ideal porque:

  • No requiere almacenamiento en el servidor : Los tokens se almacenan del lado del cliente (generalmente en localStorage o cookies).
  • Escalabilidad : Es compatible con arquitecturas distribuidas, como microservicios.
  • Seguridad : Los tokens están firmados digitalmente, lo que garantiza su integridad.

Configuración del Backend con Laravel

Para integrar JWT en Laravel, puedes usar el paquete tymon/jwt-auth, que simplifica la creación, verificación y gestión de tokens

Aquí están los pasos:

Paso 1: Instalar el paquete tymon/jwt-auth

Ejecuta el siguiente comando para instalar el paquete:

bash

composer require tymon/jwt-auth

Paso 2: Publicar la configuración

Publica el archivo de configuración del paquete ejecutando:

bash

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

Esto generará un archivo jwt.php en la carpeta config.

Paso 3: Generar una clave secreta

Genera una clave secreta para firmar los tokens:

bash

php artisan jwt:secret

Esta clave se guardará automáticamente en tu archivo .env como JWT_SECRET.

Paso 4: Configurar la autenticación

Actualiza el archivo config/auth.php para usar JWT como driver de autenticación:

php

'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

Asegúrate de que el modelo App\Models\User esté correctamente configurado y que la columna de contraseña tenga al menos 60 caracteres de longitud

Paso 5: Crear endpoints de autenticación

Crea controladores para manejar el registro, inicio de sesión y cierre de sesión. Por ejemplo:

php

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

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

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

// Logout
public function logout()
{
    auth()->logout();
    return response()->json(['message' => 'Sesión cerrada']);
}

Configuración del Frontend con React

En el frontend, React se encargará de enviar las credenciales del usuario al backend y almacenar el token JWT devuelto.

Paso 1: Instalar Axios

Axios es una biblioteca popular para realizar solicitudes HTTP. Instálala con:

bash

npm install axios

Paso 2: Crear funciones de autenticación

Crea servicios para manejar el inicio de sesión, registro y cierre de sesión. Por ejemplo:

javascript

import axios from 'axios';

const apiClient = axios.create({
    baseURL: 'http://tu-backend.test/api',
    headers: {
        'Content-Type': 'application/json',
    },
});

export const login = async (email, password) => {
    const response = await apiClient.post('/login', { email, password });
    return response.data.token;
};

export const logout = async () => {
    await apiClient.post('/logout');
};

Paso 3: Almacenar el token

Almacena el token JWT en localStorage o cookies después de iniciar sesión:

javascript

const handleLogin = async () => {
    try {
        const token = await login(email, password);
        localStorage.setItem('token', token);
        console.log('Inicio de sesión exitoso');
    } catch (error) {
        console.error('Error al iniciar sesión:', error);
    }
};

Paso 4: Proteger rutas

Usa un middleware para proteger rutas en React. Verifica si el token existe antes de permitir el acceso a ciertas páginas:

javascript

const ProtectedRoute = ({ children }) => {
    const token = localStorage.getItem('token');

    if (!token) {
        return <Navigate to="/login" />;
    }

    return children;
};

Mejores prácticas de seguridad

  • HTTPS : Asegúrate de que tu aplicación use HTTPS para cifrar las comunicaciones.
  • Expiración de tokens : Configura una duración corta para los tokens de acceso y utiliza tokens de actualización (refresh tokens) para extender sesiones
  • Validación del token : Verifica siempre la firma del token en el backend antes de procesar cualquier solicitud.

Conclusión

Implementar autenticación con JWT en una aplicación React y Laravel es una solución robusta y escalable. Laravel facilita la gestión de tokens con el paquete tymon/jwt-auth, mientras que React permite una integración fluida mediante solicitudes HTTP

Siguiendo estos pasos, puedes construir una autenticación segura y eficiente para tu proyecto. ¡Empieza hoy mismo y mejora la seguridad de tu aplicación! 😊


Leido 979 veces | 0 usuarios

Código fuente no disponible.

Compartir link del tutorial con tus amigos


ReactJS y Laravel Directorio de Empresas

USD 17.00

Descarga del código fuente

ReactJS y Laravel Directorio de Empresas

Codea Applications

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú