Laravel custom token – Sabit token

Selam Laravel dostları. API hazırlarken User doğrulama için JWT Token veya Laravel Passport gibi teknikler kullanılıyor. Tabiki token oluşturmak için User login işlemine ihtiyaç var. Bazen User login işlemi olmadan da API iletişimine ihtiyaç duyabiliyoruz. Mobil client’lar ve/veya size ihtiyaç duyan diğer servisler için sabit token oluşturabilirsiniz.

Örnek olması için TestController içinde bulunan userInfo methoduna API üzerinden erişim sağlayalım.

class TestingController extends Controller
{
    protected function userInfo()
    {
        dd(Auth::user());
        // veya 
        dd(auth()->user());
        // şeklinde kullanabilirsiniz
    }
}

routes/api.php

Route::get('/testing', [TestController::class, 'userInfo'])
    ->middleware('auth:api');

Buraya kadar olan kısım diğer doğrulamalar içinde aynı şekildeydi artık Laravel Custom Token tarafına başlayabiliriz.

Laravel Custom Token

Bu işlem için, ilk olarak Auth Config içinde API driver’ını mobile olarak değiştirin.

config/auth.php

'guards' => [
    'api' => [
        'driver' => 'mobile',
        'provider' => 'users',
    ],
],

AuthServiceProvider içinde Illuminate\Support\Facades\Auth bileşeninin viaRequest() methodundan faydalanıyoruz. viaRequest() methodunda user modeli dönerseniz kullanıcı doğrulanmış olur ve döndüğünüz user ile giriş yapılmış gibi işlem yapabilirsiniz. viaRequest() methodunda null dönerseniz token doğrulanmaz ve API request’i 401 Unauthenticated dönecektir.

app/Providers/AuthServiceProvider.php

namespace App\Providers;

use App\Models\User;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Auth;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        Auth::viaRequest('mobile', function ($request) {
            $bearerToken = $request->bearerToken();
            
            return User::where("token", $bearerToken)->first();
        });
    }
}

Artık Api istekleri viaRequest('mobile', ...) içinden geçecektir.

Laravel Passport ve Laravel Custom Token kullanımı

Yukarıda ki örnekte auth::api şeklinde uygulamak yarine standart olan Laravel passport‘u kullanıp Mobile yani custom token için ayrı Auth methodu tanımlamak mantıklı olacaktır. Bu şekilde her iki yapıyıda kullanabilirsiniz.

Auth bileşenin guards konfigürasyonunda api kımını passport olarak bırakıp mobile isminde yeni bir guards eklememiz gerek.

config/auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users'
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],

    'mobile' => [
        'driver' => 'mobile',
        'provider' => 'users',
    ],
],

Artık routes/api.php dosyasında iki yöntemide kullanabiliriz. Örneğin :

Route::get('/testing', [TestController::class, 'userInfo'])
    ->middleware('auth:api');

Route::get('/mobile/testing', [TestController::class, 'userInfo'])
    ->middleware('auth:mobile');

Değişikliklerin uygulanması için php artisan optimize konutunu çalıştırmayı unutmayın. Yukarıdaki örneğin sonucu olarak

  • /api/testing url’ine atılan requests Laravel Passport tarafından işlenir
  • /api/mobile/testing url’ine atılan requests Custom Token tarafından işlenir.

Hayırlı olsun artık birlikte çalıştığınız ekiplere entegrasyon için bir user tanımlayıp sabit token ile çalışabilirsiniz.

Ben bu tarz işlerde genelde işi bir adım daha öteye götürüp WEB, API gibi ayrı bir Routes group‘u ekleyerek custom token ile çalışacak url’leri burada tanımlıyorum. O da başka bir yazının konusu oldu 🙂

Yorum Ekle

E-posta hesabınız yayımlanmayacak.

Gerçek kişi doğrulaması
8 + 2 =