uzairports / uzair-id
OAuth 2.0 Integration with Uzbekistan Airports Single Sign-On System for Laravel
Requires
- php: ^8.4
- ext-json: *
- guzzlehttp/guzzle: ^7.15 || ^8.0
- guzzlehttp/promises: ^2.5 || ^3.0
- illuminate/auth: ^13.0
- illuminate/cache: ^13.0
- illuminate/console: ^13.0
- illuminate/contracts: ^13.0
- illuminate/database: ^13.0
- illuminate/encryption: ^13.0
- illuminate/events: ^13.0
- illuminate/http: ^13.0
- illuminate/log: ^13.0
- illuminate/routing: ^13.0
- illuminate/session: ^13.0
- illuminate/support: ^13.0
- illuminate/translation: ^13.0
- laravel/socialite: ^5.31
- nesbot/carbon: ^3.13
- psr/http-message: ^1.0 || ^2.0
- symfony/http-foundation: ^7.4 || ^8.0
- symfony/http-kernel: ^7.4 || ^8.0
Requires (Dev)
- larastan/larastan: ^3.11
- laravel/pint: ^1.31
- mockery/mockery: ^1.6.15
- orchestra/testbench: ^11.2
- pestphp/pest: ^5.1
- pestphp/pest-plugin-laravel: ^5.0
- pestphp/pest-plugin-phpstan: ^5.2
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
OAuth 2.0 интеграция с системой единой аутентификации Uzbekistan Airports.
Позволяет авторизовать пользователей через UzAirports ID, автоматически создавать аккаунты, управлять токенами и выполнять безопасный logout.
Установка
composer require uzairports/uzair-id
Опубликуйте конфигурацию и миграции:
php artisan vendor:publish --provider=Uzairports\Uzairid\Providers\UzairServiceProvider
php artisan migrate
Конфигурация
Добавьте настройки в config/services.php:
'uzairports' => [ 'client_id' => env('UZAIR_CLIENT_ID'), 'client_secret' => env('UZAIR_CLIENT_SECRET'), 'redirect' => env('UZAIR_CALLBACK_URL'), ],
И в .env:
UZAIR_CLIENT_ID=your-client-id UZAIR_CLIENT_SECRET=your-client-secret UZAIR_CALLBACK_URL=https://your-app.com/auth/callback
Для получения доступа к UzAirports ID, пожалуйста, свяжитесь с технической поддержкой: it@uzairports.com
Аутентификация
Маршруты
Добавьте в routes/web.php:
Route::get('/auth/redirect', [App\Http\Controllers\OAuthController::class, 'redirect'])->name('login'); Route::get('/auth/callback', [App\Http\Controllers\OAuthController::class, 'callback'])->name('callback'); Route::post('/auth/logout', [App\Http\Controllers\OAuthController::class, 'logout'])->name('logout');
Контроллер
Создайте OAuthController.php:
<?php namespace App\Http\Controllers; use App\Models\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Http; use Laravel\Socialite\Facades\Socialite; class OAuthController extends Controller { public function redirect() { return Socialite::driver('uzairports')->redirect(); } public function callback() { try{ $uzairUser = Socialite::driver('uzairports')->user(); } catch(\Exception $e){ return redirect('/'); } $user = User::query() ->firstOrCreate( ['email' => $uzairUser->getEmail()], [ 'email' => $uzairUser->getEmail(), 'name' => $uzairUser->getName(), ] ); auth()->login($user); auth()->user()->token()->delete(); auth()->user()->token()->create([ 'access_token' => $uzairUser->token, 'refresh_token' => $uzairUser->refreshToken, 'expires_in' => $uzairUser->expiresIn, ]); return redirect('/dashboard'); } public function logout(Request $request) { if (auth()->check()) { $user = auth()->user(); if ($user->token) { Socialite::driver('uzairports')->logout($user->token->access_token); $user->token()->delete(); } Auth::logout(); } $request->session()->invalidate(); $request->session()->regenerateToken(); return $request->wantsJson() ? new JsonResponse([], 204) : redirect('/'); } }
Модель пользователя
Добавьте в User.php:
public function token() { return $this->hasOne(OauthToken::class); }
Лицензия
Этот пакет распространяется под лицензией MIT.
Copyright (c) 2025 JSC "Uzbekistan Airports"
См. файл LICENSE для подробностей.