Middleware در لاراول( Laravel ) چیست ؟
میدلویرها (Middleware) یکی از اجزای مهم و قدرتمند در فریمورک لاراول به شمار میروند. آنها را میتوان به عنوان نگهبانان یا فیلترهایی تصور کرد که تمامی درخواستهای ورودی به برنامه شما، پیش از رسیدن به منطق اصلی، از آنها عبور میکنند. وظیفه اصلی این میدلویرها، بازرسی و پردازش این درخواستها است تا توسعهدهندگان بتوانند عملیات تکراری و ضروری مانند احراز هویت کاربران، ثبت لاگ درخواستها یا اعتبارسنجی دادهها را به شکلی یکپارچه و مطمئن مدیریت کنند.
میدلویرها به سه روش اصلی میتوانند فعال شوند: به صورت سراسری برای تمامی مسیرهای برنامه، در گروههای خاص (مانند مسیرهای تحت وب یا API) و یا به صورت اختصاصی برای یک مسیر مشخص. این انعطافپذیری به شما امکان میدهد حفاظت و پردازش را در جایی که لازم است، اعمال کنید.

یک مثال ملموس از کاربرد میدلویر، بررسی وضعیت ورود کاربر است. به جای نوشتن کد تکراری در شروع هر کنترلر، یک میدلویر به طور خودکار بررسی میکند که آیا کاربر وارد سیستم شده است یا خیر. در صورت عدم احراز هویت، کاربر به صفحه ورود هدایت میشود و در غیر این صورت، درخواست او به مقصد میرسد.
از دیدگاه امنیتی، میدلویرها کدنویسی را مطمئنتر میکنند چرا که منطق امنیتی و احراز هویت را در یک نقطه متمرکز میکنند و تکرار و اشتباه در کدها جلوگیری میکنند. این کار احتمال فراموشی در بخشهای مختلف برنامه را از بین میبرد و اطمینان و امنیت سیستم را یک پله بالاتر میبرد.
میدلویرهای پیشفرض لاراول
لاراول به صورت پیشفرض تعدادی Middleware دارد که برخی از آنها روی تمام مسیرها اجرا میشوند و برخی دیگر به صورت انتخابی توسط برنامهنویس قابلیت فعالسازی دارند.
برای مثال میدلویرهای امنیتی برای جلوگیری از حمله CSRF، رمزگذاری دادههای سشن کاربر و میدلویر ورود کاربر از جمله موارد عمومی هستند که روی تمام درخواستها فعال میشوند. و مواردی مثل بررسی ورود کاربر از آنهایی هستند که برنامهنویس میتواند به دلخواه روی یک مسیر فعال کند.
تعریف Middlewareهای جدید توسط کاربر
برای ساخت Middlewareهای جدید از ابزار خط فرمان Artisan به شکل زیر استفاده میکنیم:
|
1 |
php artisan make:middleware IsUserAdmin |
دستور بالا یک فایل جدید در مسیر app/Http/Middleware ایجاد میکند. برای اضافه کردن منطق برنامهنویسی باید این فایل را باز کنید و کدهای بخش مربوط را تغییر دهید.
مثلا در این میدلویر کدهایی شبیه به زیر ممکن است برای شما مناسب باشند:
|
1 2 3 4 5 6 7 8 |
public function handle( $request, Closure $next ) { if ( ! Auth::check() || Auth::user()->role !== 'admin' ) { abort( 403, 'دسترسی غیر مجاز' ); } return $next( $request ); } |
تخصیص میدلویرها به مسیرها یا Routeها
برای اینکه بتوانید برای میدلویرها یک نام ساده تعیین کنید باید فایل bootstrap/app.php را ویرایش کنید و به شکل زیر تغییرات دلخواه را در آن انجام دهید:
|
1 2 3 4 5 |
->withMiddleware( function( Middleware $middleware ) { $middleware->alias( [ 'admin' => \App\Http\Middleware\IsUserAdmin::class, ] ); } ) |
با انجام این کار نام admin از این به بعد معادل میدلویر شما خواهد بود. برای تخصیص آن به یک مسیر کدهای زیر را در فایل web.php درج میکنیم.
|
1 2 |
Route::get( 'admin/users', [ AdminController::class, 'users' ] ) ->middleware( [ 'admin' ] ); |
تخصیص میدلویر به مسیرها میتواند به صورت گروهی هم انجام شود:
|
1 2 3 |
Route::prefix( 'admin' )->middleware( [ 'admin' ] )->group( function() { // ... } ); |
تمام مسیرهایی که در این گروه تعریف شوند به صورت خودکار ارزیابی دسترسی میشوند و فقط مدیران سیستم میتوانند آنها را باز کنند.
با این شکل برنامهنویسی، امکان اشتباه به صفر میرسد و اگر Middleware شما به درستی نوشته شود، دسترسی غیرمجاز به سیستم غیرممکن خواهد بود.