Аутентификация
Назначение
Безопасный вход в систему, управление сессиями, контроль доступа. Все запросы (кроме публичных) проходят JWT-проверку. Модуль реагирует на кадровые события — при увольнении или смене пароля автоматически инвалидирует сессии.
Сценарии
Вход в систему
Актор: Сотрудник, управляющий, администратор
- Пользователь отправляет логин + пароль (
POST /auth/login) - Система проверяет существование пользователя
- Сверяет пароль (bcrypt, с защитой от timing-атак — сравнение выполняется даже при отсутствии пользователя)
- Проверяет: пользователь активен, не терминальный
- Создаёт сессию с refresh-токеном (срок жизни — 30 дней), сохраняет IP + User-Agent
- Возвращает пару: access-токен (короткоживущий) + refresh-токен
Ограничения:
- Rate limit: 5 запросов в минуту
- Деактивированный пользователь не может войти
- Терминальный аккаунт (POS) не может войти через стандартный логин
- Допускается несколько одновременных сессий (разные устройства)
Обновление токена
- Клиент отправляет refresh-токен (
POST /auth/refresh) - Проверяется валидность
- Старая сессия удаляется, создаётся новая
- Возвращается новая пара токенов
Rate limit: 10 запросов в минуту
Выход
Пользователь вызывает POST /auth/logout — текущая сессия удаляется.
Принудительный выход (автоматический)
Триггер: Доменные события employee-dismissed или employee-credentials-updated из модуля Кадры.
Система удаляет все сессии пользователя → пользователь вынужден перелогиниться (или не может, если уволен).
Типы пользователей
| Тип | Доступ | Может логиниться | Привязан к корпорации |
|---|---|---|---|
| Администратор | Все корпорации | Да | Нет |
| Обычный пользователь | Только своя корпорация | Да | Да (через сотрудника) |
| Терминальный | Только API-доступ | Нет | Да |
Автоматизация
| Процесс | Расписание | Действие |
|---|---|---|
| Очистка сессий | Ежедневно в 3:00 | Удаление сессий старше 30 дней |
Связи с другими контекстами
| Направление | Тип | Описание |
|---|---|---|
| Кадры → Аутентификация | Событие | Увольнение / смена пароля → инвалидация всех сессий |
| Аутентификация → все модули | Guard | GlobalJwtAuthGuard проверяет JWT, CorporationGuard проверяет corporationId |
Сущности
Пользователь (User)
| Поле | Описание |
|---|---|
| id | UUID |
| login | Уникальный идентификатор для входа |
| passwordHash | Хеш пароля (bcrypt) |
| pin | PIN-код (альтернативный вход для POS) |
| isActive | Активен ли аккаунт |
| isAdmin | Доступ ко всем корпорациям |
| isTerminal | Технический аккаунт POS-терминала |
Сессия (Session)
| Поле | Описание |
|---|---|
| id | UUID |
| userId | Ссылка на пользователя |
| refreshToken | Токен для обновления доступа |
| expiresAt | Дата истечения |
| userAgent | Информация об устройстве |
| ipAddress | IP-адрес при входе |