Firebase JWT (Stateless Auth)
artiframe add jwt eklentisi, endüstri standardı olan firebase/php-jwt kütüphanesini kullanarak ArtiFrame projelerinde State-less (oturumsuz) API yetkilendirmesi yapmanızı sağlar.
src/Auth/JwtAuth.php altında oluşturulan bu servis; Token Üretme, Doğrulama, Yenileme (Refresh) ve Middleware mantığıyla HTTP isteklerini bloklama (Bearer Token kontrolü) süreçlerini tek satıra indirir.
Eklentiyi terminalden projenize dahil edin:
$ artiframe add jwt
Komut çalıştıktan sonra .env dosyanıza aşağıdaki ayarlar eklenecektir:
JWT_SECRET_KEY=sizin_cok_gizli_ve_uzun_anahtariniz
JWT_ALGORITHM=HS256
JWT_EXPIRY=3600
JWT_SECRET_KEY değerini mutlaka tahmin edilemez ve uzun bir kriptografik metinle değiştirin.
Kullanıcı e-posta ve şifresiyle giriş yaptığında ona sunacağınız (Access Token) ve oturumu uzatmak için vereceğiniz (Refresh Token) üretim sürecidir.
<?php
use Src\Auth\JwtAuth;
$jwt = new JwtAuth();
// Kullanıcının login bilgilerini doğruladıktan sonra:
$payload = [
'user_id' => 1453,
'role' => 'admin',
'email' => '[email protected]'
];
// Access Token Üret (Süresi .env dosyasındaki JWT_EXPIRY kadardır)
$accessToken = $jwt->generate($payload);
// Refresh Token Üret (Süresi 7 gündür ve token_type = refresh claim'i içerir)
$refreshToken = $jwt->generateRefreshToken(['user_id' => 1453]);
echo json_encode([
'access_token' => $accessToken,
'refresh_token' => $refreshToken
]);
| Metot | Parametreler | Açıklama |
|---|---|---|
| generate() | array payload, int expiry | iat ve exp (Sona erme) değerlerini otomatik ekleyerek Token döner. |
| generateRefreshToken() | array payload, int expiry | Varsayılan 7 gün süreli, token_type: refresh mühürlü token döner. |
Client (React/Vue/Mobil) API'lerinize istek atarken HTTP Headers kısmında Authorization: Bearer <Token> göndermelidir.
Siz API metodunuzun (veya route'unuzun) en üstünde bunu tek bir fonksiyonla yakalayabilirsiniz.
<?php
use Src\Auth\JwtAuth;
// --- BURADAN SONRASI KORUMA ALTINDA ---
// Token yoksa, süresi geçmişse veya sahteyse bu satır anında 401 Unauthorized döner ve PHP'yi exit ile durdurur.
JwtAuth::middleware();
// Eğer kod buraya ulaştıysa; Token GÜVENLİDİR.
// Doğrulanmış kullanıcının (payload) verilerine doğrudan $_REQUEST globalinden ulaşabilirsiniz.
$activeUser = $_REQUEST['jwt_user'];
echo "Hoş geldin Kullanıcı ID: " . $activeUser['user_id'];
apiResponse() yardımcı fonksiyonu tanımlıysa 401 yanıtını doğrudan API mimarinize uygun formatta (JSON) döndürür.
Arka planda token'ı okumak, geçerliliğini denetlemek veya içindeki bir veriyi (Örn: user_id) sadece süzelmek (decode) isterseniz kullanacağınız metotlar:
<?php
$response = $jwt->verify($token);
if ($response['status'] === 'success') {
$payload = $response['data'];
} else {
// Hata detayını verir (Token has expired, Invalid token signature vs.)
echo $response['message'];
}
Token süresi dolsa bile içindeki veriyi okumak isterseniz Exception (Hata) fırlatmadan sadece Payload'ı veren metotlar:
<?php
// Payload'ı array olarak verir, çözemezse null döner.
$payload = $jwt->payload($token);
// Direkt olarak payload içindeki user_id değerini çeker
$userId = $jwt->getUserId($token);
// Sadece süresinin dolup dolmadığını (expired) kontrol eder
$isExpired = $jwt->isExpired($token);
Süresi dolmak üzere olan veya biten bir token'ı aynı verilerle ancak yeni bir süreyle (yeni exp) tekrar üretir.
<?php
// Eski token'ı gönder, aynı verilere sahip 3600 saniyelik yepyeni bir token al
$newToken = $jwt->refresh($oldToken, 3600);