💡 مشاوره

مارک پلاس

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

JSON Web Token (JWT) لاراول

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

JSON Web Token (JWT) لاراول
JSON Web Token (JWT) لاراول

📜 مقدمه‌ای بر JSON Web Token (JWT) در لاراول

JSON Web Token (JWT) یک استاندارد امن برای انتقال اطلاعات به صورت JSON بین طرفین است. این اطلاعات می‌توانند به هر شکلی باشند، به عنوان مثال اطلاعات کاربری یا دسترسی‌های یک کاربر. در لاراول، معمولاً از JWT برای پیاده‌سازی سیستم‌های احراز هویت استفاده می‌شود.

در این مقاله، نحوه پیاده‌سازی و استفاده از JWT برای احراز هویت در لاراول را بررسی خواهیم کرد.


1. 🛠 نصب پکیج JWT برای لاراول

برای شروع، باید یک پکیج برای JWT در لاراول نصب کنید. یکی از محبوب‌ترین پکیج‌ها برای این کار، پکیج tymon/jwt-auth است که به شما اجازه می‌دهد تا به راحتی JWT را در پروژه لاراول خود پیاده‌سازی کنید.

نصب پکیج:

از دستور زیر برای نصب پکیج استفاده کنید:

bash
composer require tymon/jwt-auth

2. ⚙️ تنظیمات پکیج JWT در لاراول

بعد از نصب پکیج، شما باید چندین مرحله تنظیمات را انجام دهید.

انتشار فایل پیکربندی:

برای انتشار فایل تنظیمات JWT، دستور زیر را اجرا کنید:

bash
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

این دستور فایل پیکربندی config/jwt.php را در پروژه شما ایجاد می‌کند.


3. 🔑 ساخت کلید خصوصی JWT

برای اینکه JWT به درستی کار کند، باید یک کلید خصوصی ایجاد کنید. برای این کار از دستور زیر استفاده کنید:

bash
php artisan jwt:secret

این دستور یک کلید تصادفی به فایل .env شما اضافه می‌کند تا برای تولید توکن‌های JWT از آن استفاده شود.


4. 🧑‍💻 استفاده از JWT در مدل User

برای استفاده از JWT در لاراول، باید مدل User را به‌طور خاص برای استفاده از JWT تنظیم کنید.

در فایل app/Models/User.php، کلاس User را به صورت زیر تغییر دهید:

php
namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Tymon\JWTAuth\Contracts\JWTSubject; class User extends Authenticatable implements JWTSubject { // این متد نیاز است برای بازگشت به‌طور خودکار اطلاعات کاربر public function getJWTIdentifier() { return $this->getKey(); } // این متد اطلاعاتی است که می‌خواهید در توکن ذخیره کنید public function getJWTCustomClaims() { return []; } }

5. 📝 ساخت کنترلر احراز هویت

حالا نیاز داریم که یک کنترلر برای احراز هویت کاربران ایجاد کنیم. این کنترلر وظیفه ایجاد توکن JWT و تایید توکن‌های ارسالی را بر عهده خواهد داشت.

ایجاد کنترلر:

از دستور زیر برای ساخت یک کنترلر احراز هویت استفاده کنید:

bash
php artisan make:controller AuthController

افزودن متدهای کنترلر:

در کنترلر جدید خود، متدهایی برای ورود کاربر و ایجاد توکن اضافه کنید:

php
namespace App\Http\Controllers; use App\Models\User; use Illuminate\Http\Request; use Tymon\JWTAuth\Facades\JWTAuth; use Tymon\JWTAuth\Exceptions\JWTException; class AuthController extends Controller { // متد برای ورود کاربر و دریافت توکن public function login(Request $request) { $credentials = $request->only('email', 'password'); try { // تلاش برای ایجاد توکن if (!$token = JWTAuth::attempt($credentials)) { return response()->json(['error' => 'Unauthorized'], 401); } } catch (JWTException $e) { return response()->json(['error' => 'Could not create token'], 500); } return response()->json(compact('token')); } // متد برای دریافت اطلاعات کاربر از توکن public function me() { $user = JWTAuth::user(); return response()->json(compact('user')); } // متد برای خارج کردن کاربر (logout) public function logout() { JWTAuth::invalidate(JWTAuth::getToken()); return response()->json(['message' => 'Successfully logged out']); } }

6. 🛤 تعریف روترها

برای دسترسی به این متدها، باید روترهای مناسب را در فایل routes/api.php تعریف کنید.

php
use App\Http\Controllers\AuthController; Route::post('login', [AuthController::class, 'login']); Route::middleware('auth:api')->get('user', [AuthController::class, 'me']); Route::middleware('auth:api')->post('logout', [AuthController::class, 'logout']);

7. 🛡 استفاده از Middleware برای احراز هویت

لاراول یک middleware به نام auth:api دارد که می‌توانید برای احراز هویت کاربران از آن استفاده کنید. این middleware بررسی می‌کند که درخواست حاوی یک توکن معتبر باشد یا نه.

همچنین، می‌توانید در فایل config/auth.php گزینه guards را تنظیم کنید که از JWT برای احراز هویت استفاده کند:

php
'guards' => [ 'api' => [ 'driver' => 'jwt', 'provider' => 'users', ], ],

8. 🔒 آزمایش JWT در Postman

برای آزمایش سیستم JWT، ابتدا باید وارد سیستم شوید تا توکن JWT دریافت کنید.

  1. درخواست POST به /login با اطلاعات کاربری ارسال کنید.

  2. در پاسخ، توکنی از نوع JWT دریافت خواهید کرد.

  3. برای دسترسی به اطلاعات کاربری، توکن دریافتی را در هدر درخواست به‌عنوان Authorization قرار دهید.

bash
Authorization: Bearer {your_token_here}

سپس با ارسال درخواست به /user، اطلاعات کاربر در پاسخ دریافت خواهید کرد.


نتیجه‌گیری

استفاده از JSON Web Token (JWT) برای احراز هویت در لاراول به شما این امکان را می‌دهد که به راحتی سیستم‌های احراز هویت امن و مقیاس‌پذیر بسازید. با استفاده از پکیج tymon/jwt-auth و چند مرحله تنظیمات ساده، می‌توانید توکن‌های JWT را برای کاربران خود ایجاد کرده و از آن‌ها برای دسترسی به منابع محافظت‌شده استفاده کنید.

محتوای مرتبط

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