wramirez83/sjwt
Composer 安装命令:
composer require wramirez83/sjwt
包简介
Simple and efficient JWT (JSON Web Token) generation and validation library for Laravel 12
README 文档
README
Una librería simple, eficiente y fácil de usar para generar y validar tokens JWT (JSON Web Tokens) en aplicaciones Laravel 11 y 12.
Características
- ✅ Compatible con Laravel 11 y 12
- ✅ Alto rendimiento con caché de secretos y optimizaciones
- ✅ Fácil de usar con API simple e intuitiva
- ✅ Seguro con validación de firmas y expiración
- ✅ Bien documentado con PHPDoc completo
- ✅ Pruebas unitarias completas con PHPUnit
- ✅ Middleware listo para usar para autenticación
- ✅ Independiente de modelos - funciona sin depender de Eloquent
Instalación
Requisitos
- PHP >= 8.2
- Laravel >= 11.0 o >= 12.0
- Composer
Instalación vía Composer
composer require wramirez83/sjwt
Publicar configuración (Opcional)
php artisan vendor:publish --tag=sjwt-config
Esto creará el archivo config/sjwt.php donde puedes configurar:
secret: Clave secreta para firmar tokens (por defecto usaSECRET_JWTdel.env)default_expiration: Tiempo de expiración por defecto en minutos (60)header_name: Nombre del header HTTP (por defecto:Authorization)token_index: Índice del token en el header (por defecto: 1, para "Bearer {token}")
Configuración
Variables de Entorno
Agrega a tu archivo .env:
SECRET_JWT=tu-clave-secreta-muy-segura-aqui JWT_EXPIRATION=60 JWT_HEADER_NAME=Authorization JWT_TOKEN_INDEX=1
Generar una Clave Secreta
Puedes generar una clave secreta segura usando:
php -r "echo bin2hex(random_bytes(32));"
O usar el script incluido:
php src/Tools/Generate.php
Uso Básico
Generar un Token JWT
use Wramirez83\Sjwt\SJWT; // Crear un token con datos del usuario $payload = [ 'user_id' => 123, 'email' => 'usuario@example.com', 'name' => 'Juan Pérez', ]; // Token válido por 60 minutos (por defecto) $token = SJWT::encode($payload); // Token válido por 120 minutos $token = SJWT::encode($payload, 120);
Validar y Decodificar un Token
use Wramirez83\Sjwt\SJWT; // Decodificar un token $result = SJWT::decode($token); // Verificar si el token es válido if ($result->valid) { $userId = $result->payload->user_id; $email = $result->payload->email; echo "Usuario autenticado: $email"; } else { if ($result->tokenExpired) { echo "Token expirado"; } elseif (!$result->signatureValid) { echo "Firma inválida"; } }
Leer Token desde Headers HTTP
// El método decode() puede leer automáticamente desde el header Authorization $result = SJWT::decode(); // Lee de 'Authorization' header por defecto // O especificar un header personalizado $result = SJWT::decode('.', 'X-Auth-Token', 0);
Middleware de Autenticación
Registrar el Middleware
En app/Http/Kernel.php o bootstrap/app.php (Laravel 11+):
use Wramirez83\Sjwt\Tools\AuthJWTMiddleware; // Laravel 11+ $middleware->alias([ 'auth.jwt' => AuthJWTMiddleware::class, ]);
Usar en Rutas
use Illuminate\Support\Facades\Route; use Wramirez83\Sjwt\Tools\AuthJWTMiddleware; // Proteger una ruta Route::get('/api/user', function () { return UserAuth::user()->getAtt(); })->middleware(AuthJWTMiddleware::class); // O con alias Route::middleware(['auth.jwt'])->group(function () { Route::get('/api/profile', function () { return UserAuth::user()->getAtt(); }); });
Acceder a Datos del Usuario Autenticado
use Wramirez83\Sjwt\UserAuth; // Obtener todos los atributos $userData = UserAuth::user()->getAtt(); // Obtener atributos específicos $userId = UserAuth::user()->id(); $email = UserAuth::user()->email(); $name = UserAuth::user()->name(); // Obtener cualquier atributo $role = UserAuth::user()->get('role', 'user'); // Verificar si existe un atributo if (UserAuth::user()->has('permissions')) { // ... }
Ejemplos de Uso
Login con JWT
use Wramirez83\Sjwt\SJWT; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; public function login(Request $request) { $credentials = $request->validate([ 'email' => 'required|email', 'password' => 'required', ]); if (Auth::attempt($credentials)) { $user = Auth::user(); $token = SJWT::encode([ 'id' => $user->id, 'email' => $user->email, 'name' => $user->name, ], 120); // Válido por 2 horas return response()->json([ 'token' => $token, 'user' => $user, ]); } return response()->json(['error' => 'Credenciales inválidas'], 401); }
Proteger API Endpoints
Route::middleware([AuthJWTMiddleware::class])->group(function () { Route::get('/api/dashboard', function () { $user = UserAuth::user(); return [ 'user_id' => $user->id(), 'email' => $user->email(), 'dashboard_data' => getDashboardData($user->id()), ]; }); });
Estructura del Proyecto
SJWT/
├── src/
│ ├── SJWT.php # Clase principal para encode/decode
│ ├── UserAuth.php # Singleton para datos de usuario
│ ├── SjwtServiceProvider.php # Service Provider de Laravel
│ └── Tools/
│ ├── AuthJWTMiddleware.php # Middleware de autenticación
│ ├── StructJWT.php # Constructor de estructura JWT
│ ├── UrlEncode.php # Codificación Base64URL
│ └── Generate.php # Generador de secretos
├── config/
│ └── sjwt.php # Archivo de configuración
├── tests/
│ ├── Unit/ # Pruebas unitarias
│ └── Feature/ # Pruebas de integración
└── composer.json
Pruebas
Ejecutar todas las pruebas:
composer test
O con PHPUnit directamente:
./vendor/bin/phpunit
Ejecutar pruebas específicas:
./vendor/bin/phpunit tests/Unit/SJWTTest.php
Mejoras de Rendimiento
Esta versión incluye varias optimizaciones:
- Caché de Secretos: El secreto JWT se cachea para evitar búsquedas repetidas
- Validación Eficiente: Uso de
hash_equals()para comparación segura de firmas - Manejo Optimizado de Headers: Búsqueda eficiente de tokens en headers HTTP
- Eliminación de Duplicación: Código consolidado sin clases duplicadas
Seguridad
- ✅ Validación de firmas con
hash_equals()(timing-safe) - ✅ Verificación de expiración de tokens
- ✅ Validación de formato JWT
- ✅ Manejo seguro de errores sin exponer información sensible
- ✅ Soporte para claves secretas configurables
Compatibilidad
- Laravel: 11.x, 12.x
- PHP: >= 8.2
- Dependencias:
illuminate/support: ^11.0|^12.0illuminate/http: ^11.0|^12.0nesbot/carbon: ^3.0
Contribuir
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Licencia
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.
Autor
Wilson Ramirez Z
- Email: wilson.rz@gmail.com
Changelog
v3.0.0
- ✨ Compatibilidad con Laravel 12
- ⚡ Mejoras significativas de rendimiento
- 🧪 Pruebas unitarias completas
- 📚 Documentación mejorada
- 🔧 Refactorización del código
- 🛡️ Mejoras de seguridad
v2.1.0
- Versión anterior
Soporte
Si encuentras algún problema o tienes preguntas, por favor abre un issue en el repositorio.
wramirez83/sjwt 适用场景与选型建议
wramirez83/sjwt 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 257 次下载、GitHub Stars 达 0, 最近一次更新时间为 2022 年 06 月 06 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「Authentication」 「laravel」 「jwt」 「json-web-token」 「laravel-12」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 wramirez83/sjwt 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 wramirez83/sjwt 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 wramirez83/sjwt 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Automatically logs-in users if they are already authenticated by a remote source. (e.g. environment variable REMOTE_USER)
GraphQL authentication for your headless Craft CMS applications.
A simple library to decode and parse Apple Sign In client tokens.
Laravel middleware to restrict a site or specific routes using HTTP basic authentication
JWT API authentication driver (Guard) for Laravel.
Email Toolkit Plugin for CakePHP
统计信息
- 总下载量: 257
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 15
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2022-06-06