В прошлый раз я понял, что мне не нужно делать регистрацию и аутентификацию пользователей, так как за это отвечает Телеграмм. А вот аутентифицировать своего телеграмм-бота - надо.
Аутентификация бота
Аутентификацию бота сделать просто - все запросы от него должны приходить с токеном. Если токен валидный, то считаем, что запрос пришел от бота, иначе - пока! В качестве токена разумно использовать 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/
- роуты для задач. Так же будут отдельные роуты для проектов.