💡 مشاوره

مارک پلاس

تکنولوژی نوین اینترنتی

کاربرد Middleware در احراز هویت

دسته‌بندی‌ها

کاربرد Middleware در احراز هویت
Middleware در احراز هویت

در لاراول، Middleware ابزاری است که برای فیلتر کردن درخواست‌ها پیش از رسیدن به کنترلرها استفاده می‌شود. این ویژگی به شما این امکان را می‌دهد که اقدامات خاصی را قبل از پردازش درخواست‌ها انجام دهید، مانند احراز هویت، بررسی دسترسی، اعتبارسنجی و دیگر کارها. در ارتباط با احراز هویت (Authentication)، می‌توان از Middleware برای جلوگیری از دسترسی کاربران غیرمجاز به بخش‌هایی از اپلیکیشن استفاده کرد.

چگونگی استفاده از Middleware در احراز هویت

لاراول به‌طور پیش‌فرض یک Middleware به نام auth دارد که برای بررسی احراز هویت کاربران استفاده می‌شود. این Middleware بررسی می‌کند که آیا کاربر وارد سیستم شده است یا خیر. اگر کاربر وارد نشده باشد، به صفحه ورود هدایت می‌شود.


1. استفاده از Middleware پیش‌فرض auth

در لاراول، یک Middleware به نام auth برای احراز هویت کاربران به طور پیش‌فرض وجود دارد. این Middleware در فایل‌های Route و Controller استفاده می‌شود.

1.1 استفاده از Middleware در مسیرها (Routes)

در صورت نیاز به محافظت از مسیرهایی که تنها کاربران احراز هویت شده می‌توانند به آن‌ها دسترسی داشته باشند، می‌توانید از Middleware auth در مسیرهای خود استفاده کنید. به عنوان مثال:

php
Route::get('/dashboard', function () { return view('dashboard'); })->middleware('auth');

در اینجا، اگر کاربر وارد نشده باشد، درخواست به صفحه ورود هدایت خواهد شد. اگر کاربر وارد سیستم باشد، به صفحه داشبورد دسترسی خواهد داشت.

1.2 استفاده از Middleware در کنترلرها (Controllers)

همچنین می‌توانید از Middleware در کنترلرها برای محافظت از برخی از متدها استفاده کنید. به طور مثال:

php
use App\Http\Controllers\Controller; class DashboardController extends Controller { public function __construct() { $this->middleware('auth'); // اعمال Middleware auth برای تمام متدها } public function index() { return view('dashboard'); } }

در اینجا، تمام متدهای کنترلر DashboardController توسط Middleware auth محافظت می‌شوند، یعنی فقط کاربران احراز هویت شده می‌توانند به این متدها دسترسی داشته باشند.

1.3 استفاده از Middleware در گروه‌ها (Route Groups)

می‌توانید گروهی از مسیرها را با استفاده از Middleware auth محافظت کنید. این کار برای مدیریت مسیرهایی که نیاز به احراز هویت دارند بسیار مفید است:

php
Route::middleware('auth')->group(function () { Route::get('/profile', function () { return view('profile'); }); Route::get('/settings', function () { return view('settings'); }); });

در اینجا، تمام مسیرهایی که درون گروه middleware('auth') قرار دارند، فقط برای کاربران وارد شده قابل دسترسی خواهند بود.


2. ایجاد Middleware سفارشی برای احراز هویت

گاهی ممکن است نیاز به پیاده‌سازی منطق احراز هویت خاصی داشته باشید. در این صورت می‌توانید یک Middleware سفارشی برای این منظور ایجاد کنید. برای ایجاد یک Middleware جدید در لاراول می‌توانید از دستور Artisan استفاده کنید:

bash
php artisan make:middleware CheckRole

سپس در فایل app/Http/Middleware/CheckRole.php منطق احراز هویت دلخواه خود را پیاده‌سازی کنید:

php
namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class CheckRole { public function handle(Request $request, Closure $next, $role) { if (auth()->check() && auth()->user()->role !== $role) { return redirect('home'); // هدایت به صفحه خانه اگر نقش کاربر با نقش مشخص شده برابر نباشد } return $next($request); // ادامه پردازش درخواست در صورتی که احراز هویت با موفقیت انجام شود } }

در اینجا از auth()->check() برای بررسی اینکه کاربر وارد شده است یا نه و از auth()->user()->role برای بررسی نقش کاربر استفاده کرده‌ایم.

سپس، در فایل app/Http/Kernel.php باید Middleware خود را ثبت کنید:

php
protected $routeMiddleware = [ 'checkrole' => \App\Http\Middleware\CheckRole::class, ];

در نهایت، می‌توانید از این Middleware در مسیرهای خود استفاده کنید:

php
Route::get('/admin', function () { return view('admin'); })->middleware('checkrole:admin');

3. احراز هویت با استفاده از سیستم لاراول (Sanctum, Passport)

لاراول سیستم‌های مختلفی برای مدیریت احراز هویت فراهم می‌کند، مانند Laravel Sanctum و Laravel Passport. برای هر یک از این سیستم‌ها، لاراول Middleware خاصی فراهم کرده است تا احراز هویت کاربران را در APIها انجام دهد.

3.1 استفاده از Laravel Sanctum

اگر از Sanctum برای احراز هویت API استفاده می‌کنید، می‌توانید از Middleware auth:sanctum استفاده کنید:

php
Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); });

در اینجا، auth:sanctum بررسی می‌کند که درخواست حاوی توکن معتبر است یا خیر.

3.2 استفاده از Laravel Passport

اگر از Passport برای احراز هویت API استفاده می‌کنید، می‌توانید از Middleware auth:api استفاده کنید:

php
Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); });

در اینجا، auth:api بررسی می‌کند که آیا درخواست حاوی توکن دسترسی معتبر است یا خیر.


4. Redirecting Unauthenticated Users

اگر یک کاربر وارد نشده باشد و به مسیری که نیاز به احراز هویت دارد دسترسی پیدا کند، لاراول به طور پیش‌فرض او را به صفحه ورود هدایت می‌کند. اما اگر بخواهید این رفتار را تغییر دهید، می‌توانید در Middleware Authenticate سفارشی‌سازی انجام دهید.

برای مثال، در فایل app/Http/Middleware/Authenticate.php می‌توانید مسیری که کاربران غیرمجاز باید به آن هدایت شوند را مشخص کنید:

php
protected function redirectTo(Request $request) { if (! $request->expectsJson()) { return route('login'); // هدایت به صفحه ورود در صورتی که کاربر وارد نشده باشد } }

نتیجه‌گیری

Middleware در لاراول ابزار قدرتمندی برای مدیریت احراز هویت کاربران است. از آن می‌توانید برای محافظت از مسیرهای خاص، بررسی ورود کاربران، مدیریت دسترسی به منابع مختلف و حتی سفارشی‌سازی نحوه مدیریت درخواست‌ها استفاده کنید. لاراول همچنین از امکاناتی مانند auth و سیستم‌های احراز هویت مبتنی بر Sanctum و Passport پشتیبانی می‌کند تا به سادگی کاربران را احراز هویت و مدیریت کنید.

محتوای مرتبط

پست‌های مرتبط