Пример реализации экрана авторизации с различными сценариями ошибок API и возможностью использования моков.
Проект демонстрирует реализацию экрана авторизации со следующими возможностями:
- Форма входа с валидацией полей email и пароля
- Двухфакторная аутентификация (TFA) для повышенной безопасности
- Обработка различных ошибок API - от неверных учетных данных до ошибок сервера
- Mock API с различными сценариями ответов для тестирования
- Debug меню для удобного переключения между сценариями
- React 19 - основной фреймворк
- TypeScript - типизация
- Vite - сборщик проекта
- Effector - управление состоянием
- Ant Design - UI компоненты
- Tailwind CSS - стилизация
- Atomic Router - маршрутизация
Для запуска проекта в режиме разработки:
# Установка зависимостей
bun install
# Запуск dev сервера
bun run devПроект будет доступен по адресу http://localhost:5173
# Сборка для продакшена
bun run build
# Предпросмотр собранного проекта
bun run previewДля включения режима моков создайте файл .env.local в корне проекта:
# Создайте файл .env.local
cp .env.local.example .env.localИли создайте файл вручную со следующим содержимым:
# Включение Mock API для разработки
VITE_USE_MOCK_API=true
# URL реального API (используется когда VITE_USE_MOCK_API=false)
VITE_API_URL=/apiПри включенном режиме моков все запросы к API перехватываются и заменяются заглушками. В правом нижнем углу экрана появляется Debug меню (иконка 🐛), которое позволяет:
- Переключать сценарии входа - выбирать различные варианты ответа API
- Настраивать сценарии TFA - управлять поведением двухфакторной аутентификации
- Сбрасывать настройки - возвращаться к настройкам по умолчанию
| Сценарий | Email для теста | Описание |
|---|---|---|
| Успешный вход | Любой | Успешная авторизация без TFA |
| Успешный вход с TFA | tfa@example.com |
Требуется ввод TFA кода |
| Неверные учетные данные | invalid@example.com |
Ошибка 401 - неправильный email или пароль |
| Отсутствующие поля | Любой (пустой) | Ошибка 400 - не все поля заполнены |
| Rate Limiting | ratelimit@example.com |
Ошибка 429 - слишком много попыток |
| Ошибка сервера | error@example.com |
Ошибка 500 - внутренняя ошибка сервера |
| Ошибка сети | Любой | Отсутствие подключения к интернету |
| Код | Результат |
|---|---|
123456 |
Успешная верификация |
000000 |
Неверный TFA код |
999999 |
TFA Rate Limit |
| Другой код | Неверный TFA код |
Проект обрабатывает следующие типы ошибок:
- 400 Bad Request - отсутствуют обязательные поля
- 401 Unauthorized - неверные учетные данные или TFA код
- 404 Not Found - сессия TFA истекла
- 429 Too Many Requests - превышен лимит попыток
- 500 Internal Server Error - внутренняя ошибка сервера
- Сетевые ошибки - отсутствие подключения
- Email - проверка формата email
- Пароль - минимальная длина 8 символов
- TFA код - ровно 6 цифр
- Индикаторы загрузки во время запросов
- Блокировка кнопок во время выполнения запросов
- Обработка повторных попыток
- Добавьте новый тип в
MockScenarioвsrc/shared/api/mock.ts - Добавьте response в
mockResponses - Обновите логику в функциях
mockAuthLoginPostилиmockAuthLoginTfaPost - Добавьте сценарий в
debug-menu.tsx
Реальные API эндпоинты описаны в OpenAPI спецификации и генерируются через:
bun run build:api