Merhaba, Laravel'de sanctum token tabanlı kimlik doğrulaması sağlar.
Tam emin olmamak ile beraber sanırım 11 den sonra geldi bu komut, oluşturduğunuz proje de sanctum kullanmak için
php artisan install:api
komutunuzu çalıştırırsınız bu komut: routes klasörünüz altına api.php dosyasını ekler.
Siz eğer bir SPA(Single Page Application) uygulaması veya bir app için velhasıl buradaki bilgileri servis edebileceğiniz bir client(web app, android uygulama, masaüstü uygulama vs)
ilk bu komutu çalıştırdığınızda bu komutun projenize laravel/sanctum paketini eklediğini terminal ekranından görebilirsiniz.
https://laravel.com/docs/12.x/sanctum
Komut başarılı bir şekilde bittiğinde api.php dosyası içinde
Route::get('/user', function (Request $request) {
return $request->user();
})->middleware('auth:sanctum');
tarzında bir route görürsünüz buradaki middleware fonksiyonda parametre olarak gönderilen auth:sanctum stringi vardır.
Bunun ne olduğunu anlamak için önce
https://laravel.com/docs/12.x/middleware konusuna bakın
Kısacası; auth burada bir middleware alias' ı dır. sanctum ise bir parametredir($guard)
Laravel bu alias tanımını
vendor/laravel/framework/src/Illuminate/Foundation/Configuration/Middleware.php dosyası içinde
$aliases = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
//...
];
ekler.
Sanctum paketi kurulur iken
Sizin auth.php dosyanızdaki guards alanına ;
SanctumServiceProvider dosyası içinde
public function register()
{
config([
'auth.guards.sanctum' => array_merge([
'driver' => 'sanctum',
'provider' => null,
], config('auth.guards.sanctum', [])),
]);
if (! app()->configurationIsCached()) {
$this->mergeConfigFrom(__DIR__.'/../config/sanctum.php', 'sanctum');
}
}
sanctum guard'ı eklenilir.
Bundan sonra
https://laravel.com/docs/12.x/sanctum#configuration
paketi kullanmak isteiğiniz model üzerinde yukarıda bulunan tanımları yapıp o model üzerinde kontroller sağlayıp
modele ait token üretilir. Bu üretilen tokenlar personal_access_tokens adında bir tabloya yazılır.
Siz tokeni üretirken tokena ability'ler verebilir, tokenin expired olacağı zamanı belirtebilirsiniz.
daha fazla özellik için dökümana bakın .
public function login(Request $request)
{
$request->validate([
'email' => 'required|string|email|max:255',
'password' => 'required|string'
]);
if (auth()->attempt(['email' => $request->email, 'password' => $request->password])) {
$user = auth()->user();
$token = $user->createToken('app')->plainTextToken;
return response()->json([
'access_token' => $token,
'user' => $user,
]);
}
return response()->json([
'message' => 'Unauthorized'
], 401);
}
Buradan üretilen token ile artık
auth:sanctum şeklinde middleware ile korunmuş bir endpoint'e ulaşabilirsiniz.
client tarafta
const token = 'your_bearer_token_here';
const apiUrl = 'https://your-api.com/endpoint'; // auth:sanctum ile korunan endpiont
fetch(apiUrl, {
method: 'GET',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
gibi bir istek atarak sonuç alabilirisniz.