Laravel Sanctum ve Passport SPA uygulamalarınız için api authentication işlemini sağlar. Tokenler kullanılarak authentication yapılır.
Passport
İlk olarak Passport paketinin kurulum ve kullanım işlemini gerçekleştirelim.
composer require laravel/passport php artisan migrate php artisan passport:install
Apiye erişim sağlayacak modele Passport’u tanıtmamız gerekiyor.
use Laravel\Passport\HasApiTokens; class User extends Authenticatable implements MustVerifyEmail { use HasApiTokens; ...
app/Providers/AuthServiceProvider.php dosyasını açın ve aşağıdaki gibi düzenleyin.
use Laravel\Passport\Passport; class AuthServiceProvider extends ServiceProvider { protected $policies = [ 'App\Model' => 'App\Policies\ModelPolicy', ]; public function boot() { $this->registerPolicies(); Passport::routes(); // user tablosu dışında üye tabloları varsa scope kullanılır; Passport::tokensCan([ 'admin' => 'Admin pages', 'branch' => 'Branch pages', 'courier' => 'Courier pages', 'user' => 'User pages', ]); }
config/auth.php dosyasında api driver’ı güncellenir.
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'branch-api' => [ // auth:user middleware olarak kullanılır. 'driver' => 'passport', 'provider' => 'branches', 'hash' => false, ], ... 'providers' => [ [...] 'branches' => [ 'driver' => 'eloquent', 'model' => App\Branch::class, ],
Scope varsa app/Http/Kernel.php dosyasındaki $routeMiddleware‘e aşağıdaki değerler eklenir;
'scopes' => \Laravel\Passport\Http\Middleware\CheckScopes::class, 'scope' => \Laravel\Passport\Http\Middleware\CheckForAnyScope::class,
Örnek routes/api.php dosyası;
Route::prefix('v1')->group(function () { Route::prefix('user')->group(function () { Route::post('login', [AuthController::class, 'login']); Route::post('register', [AuthController::class, 'register']); Route::post('reset-password', [AuthController::class, 'forgotPassword']); Route::post('logout', [AuthController::class, 'logout']); Route::middleware(['auth:user-api', 'scope:user'])->group(function () { Route::get('profile', [AuthController::class, 'getProfile']); Route::put('profile', [AuthController::class, 'updateProfile']); Route::post('send-message', [MessageController::class, 'sendMessage']); Route::get('get-cities', [CityDistrictController::class, 'cities']); Route::get('get-city-districts/{city}', [CityDistrictController::class, 'getCityDistrics']);
Token oluşturma;
$user = User::create($form_data); $token = $user->createToken('MyApp', ['user'])->accessToken; // user scope'una ait token
Tokeni silme – devre dışı bırakma
Auth::guard('user-api')->user()->token()->revoke();
Sanctum
İkinci paket olarak Sanctum paketinin kurulum ve kullanım işlemini gerçekleştirelim.
composer require laravel/sanctum php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" php artisan migrate
app/Http/Kernel.php dosyasını düzenleyin.
'api' => [ \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ],
Apiye erişim sağlayacak modele Sanctum’u tanıtmamız gerekiyor.
use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable { use HasApiTokens; }
Token oluşturma;
$token = $user->createToken('token-name'); return $token->plainTextToken;
Token izinlerini yönetme
return $user->createToken('token-name', ['server:update'])->plainTextToken; // check token has a given ability using the tokenCan method if ($user->tokenCan('server:update')) { // }
Route middleware’lerinde sanctum kullanımı
Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); });
Tokeni silme;
$user->tokens()->delete();
Kullanıcının güncel tokenini devre dışı bırakma;
$request->user()->currentAccessToken()->delete();
Belirli bir tokeni devre dışı bırakma
$user->tokens()->where('id', $id)->delete();
İlk Yorumu Siz Yapın