Для реализации аутентификации на веб-сайте с использованием Telegram без виджета можно использовать OAuth 2.0 и Telegram Bot API. Ваш процесс аутентификации может выглядеть следующим образом:
1. **Создание бота в Telegram**:
- Используйте BotFather для создания нового бота в Telegram.
- Получите токен для вашего бота, который будет использоваться для доступа к Telegram Bot API.
2. **Реализация механизма глубокой ссылки (deep linking)**:
- Создайте уникальную ссылку для аутентификации пользователей через вашего бота в Telegram (например, `https://t.me/your_bot?start=unique_payload`).
- Пользователь будет переадресован в вашего бота в Telegram с уникальным полезным грузом (`unique_payload`), который идентифицирует сессию аутентификации на вашем сайте.
3. **Отслеживание сообщений пользователя вашему боту**:
- Используйте Telegram Bot API для отслеживания сообщений от пользователей, которые начинают диалог с вашим ботом.
- Когда пользователь нажимает на ссылку и начинает диалог с ботом, боту отправляется соответствующий `unique_payload`.
4. **Аутентификация пользователя**:
- Когда ваш бот получает сообщение с `unique_payload`, он должен отправить пользователю сообщение для подтверждения его идентификации (допустим, "Если вы пытаетесь войти на сайт example.com, пожалуйста, нажмите кнопку подтверждения.").
- Затем бот может отправлять HTTP-запрос на ваш сайт (endpoint) с использованием `unique_payload` и идентификатором пользователя в Telegram, чтобы подтвердить его идентичность.
5. **Обработка ответа на вашем сайте**:
- Ваш сервер (в вашем случае, NestJS) должен обработать запрос от бота и установить соответствующий сеанс для пользователя.
- Если пользователь подтверждён, сервер отправляет ответ обратно в бота, который затем сообщает пользователю об успешной аутентификации.
6. **Установление сессии или токена для пользователя**:
- Создайте сессию для пользователя на сервере или генерируйте токен аутентификации (например, JWT), чтобы передать его в приложение.
- Вы можете использовать веб-сокеты или другие способы коммуникации для информирования клиентского приложения о состоянии аутентификации.
7. **На стороне клиента (React приложение)**:
- После того как пользователь аутентифицирован, обновляйте состояние приложения таким образом, чтобы отразить новый статус аутентификации пользователя (например, с помощью Redux, MobX или другого состояния управления библиотекой).
Этот процесс требует, чтобы у вас были как программно-записанные компоненты взаимодействия с Telegram API на сервере, так и настройки на клиенте для обработки изменения состояния аутентификации. Будьте внимательны к безопасности при проектировании и реализации механизмов аутентификации и проверке подлинности ваших запросов между клиентом, ботом и сервером.