CodeBlanks Logo Icon CodeBlanks

Auth middleware

PHP kursu · İleri seviye · Ders 70/92

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

  1. 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.

  2. 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ç
  3. Erken dönüş

    if (!isset($_SESSION['user_id'])) {
        return ____;
    }
    Cevabı göster
    if (!isset($_SESSION['user_id'])) {
        return "yetkisiz";
    }

İleri seviye bölümündeki tüm dersler