uzairports / uzair-id
OAuth 2.0 Integration with Uzbekistan Airports Single Sign-On System for Laravel
Requires
- php: ^8.4
- ext-json: *
- firebase/php-jwt: ^6.4 || ^7.0
- 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
- laravel/sanctum: ^4.2
- 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
- laravel/sanctum: Required to issue tokens to mobile clients through Uzair::apiRoutes() (^4.2).
Provides
None
Conflicts
None
Replaces
None
README
OAuth 2.0 интеграция с системой единой аутентификации Uzbekistan Airports.
Позволяет авторизовать пользователей через UzAirports ID, автоматически создавать аккаунты, управлять токенами и выполнять безопасный logout.
Быстрый старт
composer require uzairports/uzair-id php artisan vendor:publish --tag=uzairid-config php artisan vendor:publish --tag=uzairid-migrations php artisan migrate
UZAIR_CLIENT_ID=your-client-id UZAIR_CLIENT_SECRET=your-client-secret UZAIR_CALLBACK_URL=https://your-app.com/auth/callback
Маршруты — в routes/web.php:
use Uzairports\Uzairid\Uzair; Uzair::routes();
Трейт — в модели User:
use Uzairports\Uzairid\Concerns\HasUzairToken; class User extends Authenticatable { use HasUzairToken; }
Middleware uzair.token — на все аутентифицированные маршруты: он обновляет access-токен,
замечает завершённые входы и продлевает строку входа, чтобы уборка не удалила её из-под
живого пользователя.
Route::get('/dashboard', [DashboardController::class, 'index']) ->middleware(['auth', 'uzair.token']);
⚠️ Перед установкой в приложение с существующей таблицей
usersпрочитайте раздел Установка: пакету нужно, чтобы сusers.emailбыли сняты уникальность иNOT NULL, а колонкаpassword— удалена либоnullable.
Документация
| Раздел | О чём |
|---|---|
| Установка | Composer, публикация конфигурации, базовые и опциональные миграции, обновление со старых версий, языковые файлы, долгоживущие процессы, тестовые хелперы |
| Конфигурация | Переменные .env, полная таблица ключей config/uzairports.php, Guard, смена провайдера (uzair:provider), PKCE |
| Идентификация пользователя | Почему опознание идёт по uzair_id, ResolveUserFromSocialite, привязка старых аккаунтов по email, дополнительные поля аккаунта |
| Аутентификация | Маршруты и лимиты, конфликт имени login, Uzair::loginUrl(), контроллер, трейт HasUzairToken |
| Мобильное приложение | Вход мобильного клиента через токен Sanctum: обмен кода, обновление токена, Uzair::apiRoutes(), uzairTokens() |
| Сессии и устройства | Несколько устройств, смена id сессии, гибридный вход по паролю, завершение входов, список входов, уборка, единственная сессия |
| События | Шесть доменных событий и пример регистрации слушателей |
| Обновление токена | Middleware uzair.token, блокировка при параллельных запросах, ручное обновление |
История изменений — в CHANGELOG.md.
Для получения доступа к UzAirports ID, пожалуйста, свяжитесь с технической поддержкой: it@uzairports.com
Тесты и статический анализ
composer test
composer analyse
Лицензия
Этот пакет распространяется под лицензией MIT.
Copyright (c) 2025 JSC "Uzbekistan Airports"
См. файл LICENSE для подробностей.