Giter Site home page Giter Site logo

auth-service-for-cinema's People

Contributors

no80dy avatar si32 avatar

Watchers

 avatar

Forkers

si32

auth-service-for-cinema's Issues

Создать первоначальную структуру проекта

Создать структуру проекта по следующему примеру:

  • Корень проекта — в нём находится всё базовое, например, Dockerfile, requirements.txt и gitignore.
  • src — содержит исходный код приложения.
  • main.py — входная точка приложения.
  • api — модуль, в котором реализуется API. Другими словами, это модуль для предоставления http-интерфейса клиентским приложениям. Внутри модуля отсутствует какая-либо бизнес-логика, так как она не должна быть завязана на HTTP.
    core — содержит разные конфигурационные файлы.
  • db — предоставляет объекты баз данных (Redis, PostgreSQL) и провайдеры для внедрения зависимостей.
  • models — содержит классы, описывающие бизнес-сущности и модели базы данных.
  • services — главное в сервисе: здесь находится реализация всей бизнес-логики.

Для работы сервиса авторизации потребуются следующие зависимости:

  • SQLAlchemy - ORM для работы с PostgreSQL.
  • Alembic - работа с миграциями.
  • redis-py - для работы с Redis.
  • async-fastapi-jwt-auth - реализация генератора и валидатора JWT-токенов.
  • Typer - для создания консольных команд.
  • passlib - для работы с паролями.

Реализовать функционал входа пользователя в аккаунт

Принцип входа пользователя в аккаунт следующий: должен производиться обмен логина и пароля на пару JWT-токенов access и refresh.

В следующем репозитории на GitHub уже реализован тестовый функционал работы с авторизацией async-fastapi-jwt-auth

Code Review

Добрый день! Отличная работа, есть предложения по улучшению :)

  1. В эндпоинтах содержится бизнес логика. И если мы, например, захотим ее переиспользовать. Например, добавить новый эндпоинт с похожим функционалом. Нам придется переписывать старые эндпоинты, чтобы соответствовать DRY (https://web-creator.ru/articles/dry). Поэтому необходимо сразу всю бизнес логику выделять в отдельные модули/классы/функции, чтобы потом можно было удобно ими пользоваться
  2. Выдача истории входов пользователя должна быть с пагинацией, там через время там будет огромное количество записей
  3. Почему весь модуль закомментирован?
  4. Здесь можно просто bool(user)
  5. Здесь лучше сузить класс перехватываемых исключений, т.к перехватывание всех может привести к багам, которые будет сложно отследить
  6. Здесь перехватываются исключения из requests, а нужно из redis.exceptions - https://github.com/redis/redis-py/blob/master/redis/exceptions.py
  7. Здесь лучше логировать через logging для консистентности
  8. Лишний try/except, т.к нет обработки исключения

Реализовать функционал истории входов в аккаунт

Пользователь должен иметь доступ к истории входов в свой аккаунт.

Нужно будет хранить в Redis невалидные access токены.
В PostgreSQL храним refresh токены.

Не удаляем refresh токен, а просто ставим метку о его невалидности в PostgreSQL. Индекс с условием (Исключить невалидные записи из индекса).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.