21 febrero, 2025
Autenticación Segura con JWT en React y Laravel
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

Suscríbete a nuestro canal en Youtube
SuscríbirseLa 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.