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

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

Начну, пожалуй, с самого главного - с регистрации и аутентификации.

Регистрация

Логика регистрации проста:

  1. Получаем данные от пользователя
  2. Ищем пользователя в БД. Если находим, то выдаем ответ “такой пользователь уже существует”
  3. Хэшируем пароль
  4. Записываем нового пользователя в БД
  5. Генерим JWT-токены и отправляем в ответ

Однако, так как в качестве фронта будет телеграмм-бот, мы же не будем просить пользователя ввести пароль? В качестве решения будет следующая схема: пользователь входит в чаи с ботом и нажимает кнопку старт. Фронт отправляет ID-пользователя как username и связку <некоторая строка + ID-пользователя> как пароль. Сервер примет пароль, добавить соль и захеширует его. В итоге регистрация не будет зависить от используемого фронта, что очень хорошо.

Теперь пройдемся немного по стеку. В качестве БД использую Mongo. Чтобы не писать запросы ручками через Motor, использую odmantic - ODM, который использует pydantic. Можно использовать umongo, но у меня возникла проблема - не удалось завести запуск

  import asyncio

  asyncio.run(User.ensure_indexes())

чтобы построить индексы отдельно. Всё время ругался, что запускаю Future in different loop. Промучившись некоторое время, нашел odmantic, который полностью меня устроил.

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

С аутентификацией всё просто: ищем пользователя, сравниваем пароль. Если не нашли пользователя с таким username или проверка пароля не прошла, то говорим, что “пользователь или пароль не верны”. Иначе генерим JWT-токены и отправляем их пользователю. В документации по FastAPI есть прекрасная глава с описанием, как это сделать.

Коммит

Вместо заключения

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

Бот-помощник. Начало.

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

Comments powered by Disqus.