Я бы рекомендовал отказаться от авторизации по имени пользователя и использовать адрес электронной почты. Наша задача сделать максимально простую регистрацию для пользователя. Почты у всех уникальные, а придумывать имя пользователя - то еще приключение. Вспомните когда от вас требовалось при регистрации на коком-либо ресурсе придумывать имя пользователя. Наверняка это было давно и редко, и сколько раз приходилось изменять имя пользователя, т.к. оно уже занято, и сколько раз вы хотели все бросить и уйти с этого ресурса.
При логауте нужно инвалидировать оба токена. В вашем случае access еще будет валиден. А если его у нас украли, и я нажал Выйти, специально, чтобы злоумышленника выкинуло. Для этого в payload одного токена можно положить jti другого.
[можно лучше] Для проверки прав пользователя можно создать декоратор, который будет доставать токен из заголовка запроса и принимать решение о допуске пользователя к эндпоинту. Вот тут может быть что-то покажется интересным в этой связи https://gist.github.com/RomanAVolodin/e2731b303ef8b3c29d1052e82d5a7b36
Не нашел каким образом у вас появляется суперпользователь. Оптимальным будет создание консольной команды https://typer.tiangolo.com/
Хорошая работа! Рекомендации и предложения:
settings.is_debug
, дабы случайно в прод не отправить :)echo
лучше вынести в настройки и переменную окружения, она отвечает за логирование запросов в базу данных. А это не всегда нужно.UserLoginHistory
были удалены автоматически. https://docs.sqlalchemy.org/en/20/orm/cascades.html#using-foreign-key-on-delete-cascade-with-orm-relationships Или тут с примерами https://esmithy.net/2020/06/20/sqlalchemy-cascade-delete/