Задача: авторизация пользователя в Telegram через веб-сайт для анализа личных данных (подписки на каналы, истории и другие аспекты).
Преимущества такой схемы авторизации заключаются в следующем: при создании сервисов на основе Telegram API обычно используется личный аккаунт компании или разработчика для получения информации. Это ограничивает доступ к данным пользователей и может создать проблемы с лимитом запросов к API. В результате, это негативно сказывается на работе всего сервиса и требует сложных архитектурных решений.
Когда пользователь авторизуется через свой аккаунт в Telegram, запросы распределяются равномерно между всеми активными пользователями. Даже если один из пользователей превышает лимит запросов, Telegram API применяет таймаут только к этому аккаунту, что не влияет на работу всего сервиса. Кроме того, это позволяет строить сервис, ориентированный на данные конкретного пользователя, поскольку он обращается к Telegram API самостоятельно. Это обеспечивает более полное получение и анализ информации, а также позволяет пользователю осуществлять действия в Telegram от своего имени.
Реализация:
Для иллюстрации процесса авторизации пользователя в Telegram используются следующие этапы, выполненные с применением стека FastAPI, MongoDB и библиотеки Telethon.
- При нажатии кнопки «Войти с помощью Telegram» пользователю отображается форма для ввода номера телефона.
Пример формы для ввода номера телефона:

- После ввода номера телефона и нажатия кнопки «Отправить» отправляется запрос на получение кода авторизации через Telegram API. В результате выполнения функции возвращается строка сессии пользователя и хэш номера телефона, которые сохраняются в базе данных для последующих запросов. Затем пользователю предоставляется форма для ввода кода авторизации.
Пример формы ввода кода авторизации:

- После ввода кода и нажатия кнопки «Отправить» происходит запрос на вход в Telegram. Если у пользователя не настроена двухфакторная аутентификация, при успешном выполнении запроса производится сохранение новой строки сессии и идентификатора пользователя в Telegram. От этого момента пользователь может выполнять запросы к Telegram API от своего имени, подставляя строку сессии в каждый запрос. В случае наличия двухфакторной аутентификации пользователю предоставляется форма для ввода пароля. После ввода пароля и нажатия кнопки «Отправить», при успешном запросе также сохраняются строка сессии и идентификатор пользователя, что обеспечивает возможность выполнения всех запросов, связанных с Telegram, от имени этого пользователя.
Пример формы для ввода пароля:

Важно: на каждом этапе авторизации следует сохранять строку сессии.
Варианты реализации:
- Вариант 1: Получение кода авторизации → Сохранение строки сессии → Отправка запроса на авторизацию по коду → Сохранение строки сессии.
- Вариант 2: Получение кода авторизации → Сохранение строки сессии → Отправка запроса на авторизацию по коду → Сохранение строки сессии → Отправка запроса на авторизацию по паролю → Сохранение строки сессии.