“API’niz herhangi bir kullanıcı tarafından login olmadan erişilebiliyorsa ne yaparsınız? Frontend’i oluşturup Laravel backend’ine nasıl login olacağınızı merak ediyorsanız, Laravel Sanctum işte burada devreye giriyor. Basit ama etkili bir API kimlik doğrulama çözümü.”
Neden API Kimlik Doğrulaması Gerekli?
Neden API Kimlik Doğrulaması Gerekli?
- Verilerin yetkisiz erişimden korunması
- SPA, mobil ve genel API uygulamaları için zorunlu
- Kullanıcıların özel verilere erişiminin sağlanması için login olmaları şarttır
Sanctum’un Çalışma Mantığı (Token Tabanlı Kimlik Doğrulama)
Sanctum’un Çalışma Mantığı (Token Tabanlı Kimlik Doğrulama)
Laravel Sanctum, token tabanlı kimlik doğrulama kullanır. Bu, kullanıcı login olduktan sonra her API isteğinde Authorization başlığı üzerinden gönderilmesi gereken bir token alacağı anlamına gelir. Bu yöntem, API’nizi daha güvenli hale getirirken, frontend veya mobil uygulamalar ile entegrasyonu da kolaylaştırır.
Uygulama: Login Gerektiren Makale API’si
Uygulama: Login Gerektiren Makale API’si
Bu makalede, yalnızca login olan kullanıcılar tarafından erişilebilen bir Makale API’si oluşturacağız ve Laravel Sanctum kullanacağız.
Adım 1: Sanctum’u Kur
Adım 1: Sanctum’u Kur
composer require laravel/sanctum
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate
Bu komut, kullanıcıların API tokenlerini saklamak için kullanılacak personal_access_tokens tablosunu ekleyecektir.
Middleware Sanctum’u app/Http/Kernel.php dosyasında api grubu içerisine ekleyin:
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
Adım 2: Kullanıcı Modelini Ayarla
Adım 2: Kullanıcı Modelini Ayarla
User modelinin HasApiTokens traitini kullandığından emin olun:
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
// ...
}
Adım 3: Kimlik Doğrulama Endpoint’lerini Oluştur (Login, Register, Logout)
Adım 3: Kimlik Doğrulama Endpoint’lerini Oluştur (Login, Register, Logout)
AuthController isimli bir kontrolör oluşturun:
php artisan make:controller Api/AuthController
Register, login ve logout fonksiyonları örneği:
public function register(Request $request) {
$validated = $request->validate([
'name' => 'required',
'email' => 'required|email|unique:users',
'password' => 'required|min:6',
]);
$user = User::create([
'name' => $validated['name'],
'email' => $validated['email'],
'password' => bcrypt($validated['password']),
]);
$token = $user->createToken('api-token')->plainTextToken;
return response()->json(['user' => $user, 'token' => $token], 201);
}
public function login(Request $request) {
$credentials = $request->only('email', 'password');
if (!auth()->attempt($credentials)) {
return response()->json(['message' => 'Unauthorized'], 401);
}
$user = auth()->user();
$user->tokens()->delete(); // 1 kullanıcı = 1 aktif token
$token = $user->createToken('api-token')->plainTextToken;
return response()->json(['user' => $user, 'token' => $token]);
}
public function logout(Request $request) {
$request->user()->currentAccessToken()->delete(); // Aktif token silinerek logout yapılır.
return response()->json(['message' => 'Logged out']);
}
Adım 4: API Kimlik Doğrulama Yolları ve Makale Koruma
Adım 4: API Kimlik Doğrulama Yolları ve Makale Koruma
routes/api.php dosyasını düzenleyin:
Route::post('register', [AuthController::class, 'register']);
Route::post('login', [AuthController::class, 'login']);
Route::middleware('auth:sanctum')->group(function () {
Route::post('logout', [AuthController::class, 'logout']);
Route::apiResource('articles', ArticleController::class);
});
Adım 5: API Kimlik Doğrulamasını Postman ile Test Et
Adım 5: API Kimlik Doğrulamasını Postman ile Test Et
Register
Register
POST /api/register
Content-Type: application/json
{
"name": "Atha",
"email": "[email protected]",
"password": "password123"
}
Login
Login
POST /api/login
Content-Type: application/json
{
"email": "[email protected]",
"password": "password123"
}
Response:
{
"user": {
"id": 1,
"name": "Atha",
...
},
"token": "1|longapitoken..."
}
Token ile Makalelere Erişim
Token ile Makalelere Erişim
Başlık ekleyin:
Authorization: Bearer 1|longapitoken...
GET /api/articles
Hata Yönetimi ve Durum Kodu
Hata Yönetimi ve Durum Kodu
- 201 Created: Kayıt başarılı
- 200 OK: Giriş başarılı, veriler alındı
- 401 Unauthorized: Token hatalı veya süresi dolmuş
- 422 Unprocessable Entity: Doğrulama başarısız
Yeni Başlayanların Yaptığı Ortak Hatalar
Yeni Başlayanların Yaptığı Ortak Hatalar
- Sanctum’u publish ve migrate etmeyi unutmak
auth:sanctummiddleware’ini eklemeyi unutmak- Token’nın başlıkta gönderilmemesi
Accept: application/jsonayarlamayı unutmak- Yanlış endpoint kullanmak (Giriş için POST, GET değil)
- Yanlış route grubu (middleware içinde olmalı)
Sonraki Adımlar
Sonraki Adımlar
- Token yenileme
- Rol/yetki yönetimi
- API Kaynağı
- Thunder Client ile test etme
🚀 Tartışalım ve Paylaşalım!
🚀 Tartışalım ve Paylaşalım!
Bir adımda zorlandıysanız, lütfen yorumlarda belirtin! Ayrıca Sanctum kullanım deneyimlerinizi de paylaşabilirsiniz. İlginizi çeken başka konuları istek olarak da iletebilirsiniz (token yenileme, roller vb.).
Referanslar:
Kaynak: Orijinal Makale
- Neden API Kimlik Doğrulaması Gerekli?
- Sanctum’un Çalışma Mantığı (Token Tabanlı Kimlik Doğrulama)
- Uygulama: Login Gerektiren Makale API’si
- Adım 1: Sanctum’u Kur
- Adım 2: Kullanıcı Modelini Ayarla
- Adım 3: Kimlik Doğrulama Endpoint’lerini Oluştur (Login, Register, Logout)
- Adım 4: API Kimlik Doğrulama Yolları ve Makale Koruma
- Adım 5: API Kimlik Doğrulamasını Postman ile Test Et
- Hata Yönetimi ve Durum Kodu
- Yeni Başlayanların Yaptığı Ortak Hatalar
- Sonraki Adımlar
- 🚀 Tartışalım ve Paylaşalım!


