Записи Бот-помощник. Рефакторинг аутентификации
Post
Cancel

Бот-помощник. Рефакторинг аутентификации

В прошлый раз я понял, что мне не нужно делать регистрацию и аутентификацию пользователей, так как за это отвечает Телеграмм. А вот аутентифицировать своего телеграмм-бота - надо.

Аутентификация бота

Аутентификацию бота сделать просто - все запросы от него должны приходить с токеном. Если токен валидный, то считаем, что запрос пришел от бота, иначе - пока! В качестве токена разумно использовать JWT-токен с большим временем жизни, например, пару лет. На данной этапе не вижу причин, почему это может не подойти. Возможно, делают как-то иначе, но пока мне так подойдет. Может, где-нибудь потом увижу и узнаю более “кошерный” способ.

Старый код с регистрацией и аутентификацией удалять не буду, вдруг пригодится. Просто не будут включать роуты в приложение. А функции для создания и проверки токена перенесу в отдельный модуль utils. Токен буду передавать в хедере Authorization: Bearer <token>.

Для удобной генерации токена для бота написал скрипт:

from datetime import timedelta

from utils.utils import create_single_token

if __name__ == '__main__':
    token, _ = create_single_token({'sub': 'telegram_bot'}, timedelta(weeks=104))
    print(token)

О Swagger UI

В FastAPI есть удобная автодокументация с возможностью отправки запросов сразу в роуты. Однако, есть недостаток: нельзя задать кастомный хедер Authorization. Только если задать схему аутентификации, передать логин и пароль и от роута получить токен. В первую очередь это связанно со спецификацией OpenAPI 3.0. Вот ссылка на коммент.

Поэтому придется использовать Postman для запросов. Да и вообще, надо тесты писать, чтобы проверять функциональность!

Заключение

Для тестирования того, что аутентификация работает, создал один роут /todos/tasks/. /todos - роуты для работы со списком задач, /tasks/ - роуты для задач. Так же будут отдельные роуты для проектов.

Коммит

Бот-помощник. Регистрация и аутентификация

Бот-помощник. Добавление проекта

Comments powered by Disqus.