{"id":49098718,"url":"https://github.com/merely04/react-authorization-example","last_synced_at":"2026-04-20T22:13:13.177Z","repository":{"id":319652600,"uuid":"1079219525","full_name":"merely04/react-authorization-example","owner":"merely04","description":null,"archived":false,"fork":false,"pushed_at":"2025-10-19T11:22:38.000Z","size":70,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-19T21:29:08.594Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://merely04.github.io/react-authorization-example/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/merely04.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-19T11:17:31.000Z","updated_at":"2025-10-19T11:26:50.000Z","dependencies_parsed_at":"2025-10-19T21:30:52.394Z","dependency_job_id":null,"html_url":"https://github.com/merely04/react-authorization-example","commit_stats":null,"previous_names":["merely04/react-authorization-example"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/merely04/react-authorization-example","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merely04%2Freact-authorization-example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merely04%2Freact-authorization-example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merely04%2Freact-authorization-example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merely04%2Freact-authorization-example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/merely04","download_url":"https://codeload.github.com/merely04/react-authorization-example/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merely04%2Freact-authorization-example/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32067847,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T21:26:33.338Z","status":"ssl_error","status_checked_at":"2026-04-20T21:26:22.081Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-20T22:13:12.694Z","updated_at":"2026-04-20T22:13:13.169Z","avatar_url":"https://github.com/merely04.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# React Authorization Example\n\nПример реализации экрана авторизации с различными сценариями ошибок API и возможностью использования моков.\n\n## Обзор проекта\n\nПроект демонстрирует реализацию экрана авторизации со следующими возможностями:\n\n- **Форма входа** с валидацией полей email и пароля\n- **Двухфакторная аутентификация (TFA)** для повышенной безопасности\n- **Обработка различных ошибок API** - от неверных учетных данных до ошибок сервера\n- **Mock API** с различными сценариями ответов для тестирования\n- **Debug меню** для удобного переключения между сценариями\n\n## Технологический стек\n\n- **React 19** - основной фреймворк\n- **TypeScript** - типизация\n- **Vite** - сборщик проекта\n- **Effector** - управление состоянием\n- **Ant Design** - UI компоненты\n- **Tailwind CSS** - стилизация\n- **Atomic Router** - маршрутизация\n\n## Запуск проекта\n\n### Разработка\n\nДля запуска проекта в режиме разработки:\n\n```bash\n# Установка зависимостей\nbun install\n\n# Запуск dev сервера\nbun run dev\n```\n\nПроект будет доступен по адресу `http://localhost:5173`\n\n### Сборка\n\n```bash\n# Сборка для продакшена\nbun run build\n\n# Предпросмотр собранного проекта\nbun run preview\n```\n\n## Режим моков\n\n### Включение режима моков\n\nДля включения режима моков создайте файл `.env.local` в корне проекта:\n\n```bash\n# Создайте файл .env.local\ncp .env.local.example .env.local\n```\n\nИли создайте файл вручную со следующим содержимым:\n\n```env\n# Включение Mock API для разработки\nVITE_USE_MOCK_API=true\n\n# URL реального API (используется когда VITE_USE_MOCK_API=false)\nVITE_API_URL=/api\n```\n\n### Использование режима моков\n\nПри включенном режиме моков все запросы к API перехватываются и заменяются заглушками. В правом нижнем углу экрана появляется **Debug меню** (иконка 🐛), которое позволяет:\n\n1. **Переключать сценарии входа** - выбирать различные варианты ответа API\n2. **Настраивать сценарии TFA** - управлять поведением двухфакторной аутентификации\n3. **Сбрасывать настройки** - возвращаться к настройкам по умолчанию\n\n## Доступные сценарии моков\n\n### Сценарии входа\n\n| Сценарий                | Email для теста         | Описание                                   |\n| ----------------------- | ----------------------- | ------------------------------------------ |\n| Успешный вход           | Любой                   | Успешная авторизация без TFA               |\n| Успешный вход с TFA     | `tfa@example.com`       | Требуется ввод TFA кода                    |\n| Неверные учетные данные | `invalid@example.com`   | Ошибка 401 - неправильный email или пароль |\n| Отсутствующие поля      | Любой (пустой)          | Ошибка 400 - не все поля заполнены         |\n| Rate Limiting           | `ratelimit@example.com` | Ошибка 429 - слишком много попыток         |\n| Ошибка сервера          | `error@example.com`     | Ошибка 500 - внутренняя ошибка сервера     |\n| Ошибка сети             | Любой                   | Отсутствие подключения к интернету         |\n\n### Сценарии TFA\n\n| Код        | Результат            |\n| ---------- | -------------------- |\n| `123456`   | Успешная верификация |\n| `000000`   | Неверный TFA код     |\n| `999999`   | TFA Rate Limit       |\n| Другой код | Неверный TFA код     |\n\n## Особенности реализации\n\n### Обработка ошибок\n\nПроект обрабатывает следующие типы ошибок:\n\n- **400 Bad Request** - отсутствуют обязательные поля\n- **401 Unauthorized** - неверные учетные данные или TFA код\n- **404 Not Found** - сессия TFA истекла\n- **429 Too Many Requests** - превышен лимит попыток\n- **500 Internal Server Error** - внутренняя ошибка сервера\n- **Сетевые ошибки** - отсутствие подключения\n\n### Валидация форм\n\n- **Email** - проверка формата email\n- **Пароль** - минимальная длина 8 символов\n- **TFA код** - ровно 6 цифр\n\n### Состояние загрузки\n\n- Индикаторы загрузки во время запросов\n- Блокировка кнопок во время выполнения запросов\n- Обработка повторных попыток\n\n## Разработка\n\n### Добавление новых сценариев моков\n\n1. Добавьте новый тип в `MockScenario` в `src/shared/api/mock.ts`\n2. Добавьте response в `mockResponses`\n3. Обновите логику в функциях `mockAuthLoginPost` или `mockAuthLoginTfaPost`\n4. Добавьте сценарий в `debug-menu.tsx`\n\n### Изменение API\n\nРеальные API эндпоинты описаны в OpenAPI спецификации и генерируются через:\n\n```bash\nbun run build:api\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerely04%2Freact-authorization-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmerely04%2Freact-authorization-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerely04%2Freact-authorization-example/lists"}