Auth middleware
Oturum kontrolü yapan bir auth middleware yazmayı öğrenirsin.
Auth middleware
Auth middleware, korumalı rotalara erişmeden önce oturum kontrolü yapar. En yaygın desen: $_SESSION['user_id'] var mı diye bakar; yoksa yetkisiz yanıt döndürür ve $next'i çağırmaz.
Buna early return denir. if (!isset($_SESSION['user_id'])) { return 'yetkisiz'; } yazdığında iç katmanlar atlanır; istek hemen geri döner.
Auth katmanını pipeline'ın en dışa yakın bir yerine koyarsan, korumalı alanlara hiç dokunmadan bile reddedebilirsin. Bu sayede her rotaya ayrı if yazmaktan kurtulursun.
Korunan rotalar
Auth middleware'i buildPipeline zincirine eklediğinde, o rotaya gelen her istek önce bu kontrolden geçer. Eğer $_SESSION boşsa istek ilerlemez; $finalHandler hiç çağrılmaz.
Bu, her rotaya ayrı bir if yazmaktan kurtarır. Açık rotalar (giriş, kayıt) auth olmadan; kapalı rotalar (panel, ayarlar) auth ile zincirlenir.
Test sırasında unset($_SESSION['user_id']) ile misafir, $_SESSION['user_id'] = 42 ile giriş yapmış kullanıcıyı benzebilirsin.
Uygulama authMiddleware yaz
Bir authMiddleware($request, $next) fonksiyonu tanımla. Eğer $_SESSION['user_id'] set değilse "yetkisiz" döndür (early return). Set ise $next($request) çağrısının sonucunu döndür. session_start() zaten çağrıldı. Önce unset($_SESSION['user_id']) yapıp çağır; sonra $_SESSION['user_id'] = 42 yapıp tekrar çağır. Her sonucu yazdır.
Örnek çözümü göster
function authMiddleware($request, $next) { if (!isset($_SESSION['user_id'])) { return "yetkisiz"; } return $next($request); } yaz. Sonra unset($_SESSION['user_id']); echo authMiddleware("panel", function ($r) { return "panel göster"; }) . "\n"; ve $_SESSION['user_id'] = 42; echo authMiddleware("panel", function ($r) { return "panel göster"; }) . "\n"; çağır.
Örnek çözüm:
<?php
session_start();
function authMiddleware($request, $next) {
if (!isset($_SESSION['user_id'])) {
return "yetkisiz";
}
return $next($request);
}
unset($_SESSION['user_id']);
echo authMiddleware("panel", function ($r) { return "panel göster"; }) . "\n";
$_SESSION['user_id'] = 42;
echo authMiddleware("panel", function ($r) { return "panel göster"; }) . "\n";
Kendini test et
-
Auth middleware'de kullanıcı giriş yapmamışsa ne yapılmalı?
- Hatayı görmezden gelip devam et
- Yetkisiz yanıt döndür ve $next'i çağırma
- Yeni oturum başlat
- Veritabanına yaz
Cevabı göster
Yetkisiz yanıt döndür ve $next'i çağırma — Doğru. Yetkisiz durumda $next çağrılmaz; iç katmanlar atlanır.
-
Auth kavramlarını eşleştir
- $_SESSION['user_id']
- Giriş yapmış kullanıcı
- early return
- İç katmanları atlar
- yetkisiz
- Reddedilen yanıt
- $next($request)
- Sonraki adıma geç
-
Erken dönüş
if (!isset($_SESSION['user_id'])) { return ____; }Cevabı göster
if (!isset($_SESSION['user_id'])) { return "yetkisiz"; }