Files
intaleq_v2/app/Http/Middleware/JwtAuthMiddleware.php
2026-04-22 23:16:23 +03:00

63 lines
2.1 KiB
PHP

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
use Firebase\JWT\ExpiredException;
/**
* وسيط التحقق من الهوية (JWT Authentication Middleware)
*
* الغرض من الملف:
* التحقق من "رمز الوصول" (Access Token) الذي يحمله المستخدم بعد تسجيل الدخول للتأكد من هويته.
*
* كيفية العمل:
* 1. يستخرج الرمز من رأس الطلب (Authorization Header).
* 2. يقوم بفك تشفير الرمز (Decode) باستخدام مفتاح سري (JWT Secret).
* 3. يستخرج بيانات المستخدم (مثل المعرف والنوع) ويضيفها للطلب ليسهل الوصول إليها في المتحكمات.
* 4. يمنع الطلب إذا كان الرمز منتهي الصلاحية أو غير صحيح.
*/
class JwtAuthMiddleware
{
public function handle(Request $request, Closure $next)
{
$authHeader = $request->header('Authorization');
if (!$authHeader || !str_starts_with($authHeader, 'Bearer ')) {
return response()->json([
'status' => 'failure',
'message' => 'Missing or invalid Authorization header'
], 401);
}
$token = substr($authHeader, 7);
try {
$decoded = JWT::decode($token, new Key(config('intaleq.jwt_secret'), 'HS256'));
// Attach JWT claims to request
$request->merge([
'_jwt_user_id' => $decoded->user_id ?? null,
'_jwt_user_type' => $decoded->user_type ?? null,
'_jwt_fingerprint' => $decoded->fingerprint ?? null,
]);
return $next($request);
} catch (ExpiredException $e) {
return response()->json([
'status' => 'failure',
'message' => 'Token expired'
], 401);
} catch (\Exception $e) {
return response()->json([
'status' => 'failure',
'message' => 'Invalid token'
], 401);
}
}
}