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 🙂