İçeriğe geç

Laravel Sanctum ve Passport ile Api Kullanımı

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();
Kategori:LaravelLaravel AdvancedPaketler

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir