JWT Kimlik Doğrulaması ile Güvenli Laravel API Oluşturma
Laravel ile API’ler oluştururken, özellikle kullanıcı verileriyle uğraşırken güvenli kimlik doğrulama sağlamak çok önemlidir. JSON Web Tokens (JWT), durum bilgisi olmayan uygulamalarda kimlik doğrulamayı işlemek için sağlam bir yöntem sunar ve kullanıcı bilgilerinin taraflar arasında güvenli bir şekilde iletilmesini sağlar. Bu kılavuz, JWT kimlik doğrulamasını kullanarak güvenli bir Laravel API oluşturma sürecinde size yol gösterecektir.
Ön Koşullar
- Temel PHP ve Laravel bilgisi.
- Makinenizde Laravel yüklü (tercihen Laravel 9 veya daha yeni).
- Composer yüklü.
- MySQL veya uygulamanız için ayarlanmış başka bir veritabanı.
Adım 1: Yeni Bir Laravel Projesi Oluşturun
İlk olarak, Composer kullanarak yeni bir Laravel projesi oluşturun:
composer create-project laravel/laravel laravel-jwt-api
Proje dizininize gidin:
cd laravel-jwt-api
Adım 2: JWT Kimlik Doğrulama Paketini Yükleyin
Laravel’de JWT kimlik doğrulaması için en yaygın kullanılan paket tymon/jwt-auth
composer require tymon/jwt-auth
Paket kurulumundan sonra JWT yapılandırmasını yayınlayın:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
Bu, projenizde bir
config/jwt.php
Adım 3: JWT Gizli Anahtarını Oluşturun
JWT’nin belirteçleri imzalamak için kullanacağı bir gizli anahtar oluşturun:
php artisan jwt:secret
Bu,
.env
JWT_SECRET
Adım 4: Kimlik Doğrulamayı Ayarlayın
JWT kimlik doğrulamasını ayarlamak için API’niz için varsayılan korumayı yapılandırmanız gerekir.
Config/auth.php
'defaults' => [
'guard' => 'api',
'şifreler' => 'kullanıcılar',
],
‘guards’ => [‘api’ => [
‘sürücü’ => ‘jwt‘,
‘sağlayıcı’ => ‘kullanıcılar’,
],
],
Bu Laravel’e API istekleri için
jwt
kullanıcı
Adım 5: Kullanıcı Modelini ve Geçişi Oluşturun
Henüz bir
Kullanıcı
php artisan make:model Kullanıcı -m
Oluşturulan geçiş dosyasını
veritabanı/migrations/
ad
e-posta
parola
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->timestamps();
});
}
Kullanıcılar
php artisan migrate
Adım 6: Kullanıcı Modelinde JWT Yöntemlerini Uygulayın
Kullanıcı
(app/Models/User.php
JWTSubject
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements JWTSubject{
public function getJWTIdentifier()
{
return $this->getKey();
}
public function getJWTCustomClaims(){
return [];
}
}
Adım 7: Kimlik Doğrulama Denetleyicileri Oluşturun
Kullanıcı kimlik doğrulamasını işlemek için bir denetleyici oluşturun:
php artisan make:controller AuthController
AuthController.php
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Tymon\JWTAuth\Facades\JWTAuth;
class AuthController extends Controller{
public function register(Request $request)
{
$request->validate([
‘name’ => ‘required|string|max:255’,
’email’ => ‘required|string|email|max:255|unique:users’,
‘password’ => ‘required|string|min:6|confirmed‘,
]);
$user = User::create([‘name’ => $request->name,
’email’ => $request->email,
‘password’ => Hash::make($request->password),
]);
$token = JWTAuth::fromUser($user);return response()->json([‘token’ => $token], 201);
}
public function login(Request $request)
{
$credentials = $request->only(’email’, ‘password’);
if (!$token = Auth::attempt($credentials)) {
return response()->json([‘error’ => ‘Invalid credentials’], 401);
}
return response()->json([‘token’ => $token]);
}
public function logout()
{
Auth::logout();
return response()->json([‘message’ => ‘Successfully logged out’]);
}
public function me()
{
return response()->json(Auth::user());
}
}
Adım 8: API Rotalarını Tanımlayın
Routes/api.php
app\Http\Controllers\AuthControllerkullanın;
Route::post(‘register’,[AuthController::class, ‘register’]);
Route::post(‘login’,[AuthController::class, ‘login’]);
Route::post(‘logout’,[AuthController::class, ‘logout’])->middleware(‘auth:api’);
Route::get(‘ me‘,[AuthController::class, ‘me’])->middleware(‘auth:api’);
Bu rotalar kullanıcı kaydı, oturum açma, oturum kapatma ve kimliği doğrulanmış kullanıcıyı getirme işlemlerini gerçekleştirir.
Adım 9: API Rotalarını Koruma
Diğer API rotalarını korumak için
auth:api
gönderiler
Route::middleware('auth:api')->group(function () {
Route::resource('posts', PostController::class);
});
Bu, yalnızca kimliği doğrulanmış kullanıcıların bu rotalara erişebilmesini sağlar.
Adım 10: API’nin Test Edilmesi
Postman veya cURL gibi araçları kullanarak API’nizi test edebilirsiniz.
- Bir kullanıcı kaydedin:
POST /api/register
Content-Type: application/json{
“İsim”: “John Doe”,
“e-posta”: “john@example.com”,
“Şifre”: “Şifre”,
“password_confirmation”: “şifre”
} - Giriş yap:
POST /api/login
Content-Type: application/json{
“e-posta”: “john@example.com”,
“Şifre”: “şifre”
}Bu, diğer isteklerin kimliğini doğrulamak için kullanabileceğiniz bir belirteç döndürecektir.
- Korumalı rotaya erişim:gibi korumalı bir rotaya erişmek için
GET /api/me
başlığına belirteci ekleyin:Yetkilendirme
Yetkilendirme: Taşıyıcı
Adım 11: JWT Belirteçlerini Yenileme (İsteğe Bağlı)
Bir belirteci yenilemek için
AuthController
public function refresh()
{
$token = Auth::refresh();
return response()->json(['token' => $token]);
}
Yenilemek için rotayı ekleyin:
Route::post('refresh', [AuthController::class, 'refresh'])->middleware('auth:api');
Sonuç
Bu kılavuzu takip ederek, JWT kimlik doğrulaması ile güvenli bir Laravel API’si oluşturdunuz, kullanıcı kaydı, oturum açma ve korumalı rotalara erişim sağladınız. JWT, özellikle API’leri ölçeklendirmek için yararlı olan durumsuz bir kimlik doğrulama mekanizmasını sürdürmenize olanak tanır. Bu kurulumla, uygulamanızın kimlik doğrulama mantığını daha da özelleştirebilir ve rol tabanlı erişim kontrolü ve uzun ömürlü oturumlar için yenileme belirteçleri gibi ek özellikleri entegre edebilirsiniz.