P2-002 Регистрация и вход через Telegram¶
Метаданные¶
| Поле | Значение |
|---|---|
| Фаза | Phase 2: Core |
| Статус | done |
| Приоритет | critical |
| Связь с roadmap | Roadmap - Аутентификация |
Контекст¶
Бизнес-контекст¶
Telegram — основной способ аутентификации для AqStream (FR-1.1.1). Большинство пользователей платформы используют Telegram для коммуникации, поэтому вход через него должен быть максимально простым. При регистрации через Telegram аккаунт активируется автоматически без подтверждения email.
Технический контекст¶
- Telegram Login Widget для web-аутентификации
- Telegram Bot API для привязки аккаунта
- User Service должен поддерживать оба способа входа (Telegram и email)
telegram_idдолжен быть уникальным среди активных пользователей
Связанные документы:
- User Service — endpoint /api/v1/auth/telegram
- Notification Service — Telegram Bot
- Domain Model - User — поле telegram_id
- Functional Requirements
Цель¶
Реализовать регистрацию и вход пользователей через Telegram с автоматической привязкой аккаунта к Telegram chat для уведомлений.
Definition of Ready (DoR)¶
- [x] Контекст понятен и описан
- [x] Цель сформулирована
- [x] Acceptance Criteria определены
- [x] Технические детали проработаны
- [x] Зависимости определены и разрешены
- [x] Нет блокеров
Acceptance Criteria¶
- [x] Пользователь может зарегистрироваться через Telegram Login Widget (
POST /api/v1/auth/telegram) - [x] При первом входе создаётся новый аккаунт с данными из Telegram (first_name, last_name, photo_url)
- [x] При повторном входе — аутентификация существующего пользователя
- [x] Telegram ID проверяется на уникальность
- [x] Аккаунт активируется автоматически (без email verification)
- [x] При успешном входе возвращается JWT access token и refresh token
- [x] Валидация данных от Telegram (проверка hash согласно Telegram Login Widget)
- [x] Сохраняется
telegram_chat_idдля отправки уведомлений - [x] Пользователь может привязать существующий email-аккаунт к Telegram
Definition of Done (DoD)¶
- [x] Все Acceptance Criteria выполнены
- [x] Код написан согласно code style проекта
- [x] Unit тесты написаны и проходят
- [x] Integration тесты написаны → перенесено в P2-013
- [x] Документация API обновлена (OpenAPI аннотации)
- [x] Liquibase миграции созданы (если требуются изменения схемы)
- [x] Code review пройден
- [x] CI/CD pipeline проходит
- [x] Функционал проверен на локальном окружении
Технические детали¶
Затрагиваемые компоненты¶
- [x] Backend:
user-service-service(TelegramAuthService) - [ ] Frontend: Telegram Login Widget на странице входа (P2-015)
- [x] Database: колонки
telegram_id,telegram_chat_idв таблицеusers - [x] Infrastructure: конфигурация Telegram Bot Token
Подход к реализации¶
-
Telegram Login Widget валидация:
-
Endpoints:
POST /api/v1/auth/telegram # Вход/регистрация через Telegram Body: { "id": 123456789, "first_name": "...", "hash": "...", "auth_date": ... } Response: { "accessToken": "...", "refreshToken": "...", "user": {...} } POST /api/v1/auth/telegram/link # Привязка Telegram к существующему аккаунту (требует JWT) Body: { "id": 123456789, "first_name": "...", "hash": "...", "auth_date": ... } Response: { "accessToken": "...", "refreshToken": "...", "user": {...} } -
Связывание аккаунтов:
- Если пользователь с таким
telegram_idуже существует — аутентификация - Если не существует — создание нового аккаунта
POST /api/v1/auth/telegram/link— привязка Telegram к существующему email-аккаунту
Environment Variables¶
Зависимости¶
Блокирует¶
- P2-013 Telegram Bot интеграция (нужна авторизация)
- P2-015 Frontend auth pages (Telegram Login Widget)
Зависит от¶
- P2-001 Базовая структура User entity и AuthService
Out of Scope¶
- Telegram Bot команды (/start, /help) — P2-013
- Telegram notifications — P2-014
- Привязка нескольких Telegram аккаунтов к одному User
Заметки¶
- Telegram Login Widget требует HTTPS в production
- Для локальной разработки можно использовать ngrok или mock данные
- Bot Token должен быть создан через @BotFather