auth-service-for-cinema's People
Forkers
si32auth-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 - для работы с паролями.
Реализовать функционал выхода пользователя из аккаунта
Реализовать функционал выхода пользователя из аккаунта: удаление refresh
токена
Реализовать функционал входа пользователя в аккаунт
Принцип входа пользователя в аккаунт следующий: должен производиться обмен логина и пароля на пару JWT-токенов access
и refresh
.
В следующем репозитории на GitHub уже реализован тестовый функционал работы с авторизацией async-fastapi-jwt-auth
Реализовать функционал CRUD операций для ролей
Данный CRUD должен содержать:
- Создание роли
- Удаление роли
- Изменение роли
- Просмотр всех ролей
Реализовать функционал проверки роли у пользователя
Нужно реализовать метод для проверки наличия прав у пользователя.
Реализовать функционал обновления access-токена
При истечении access
-токена, нужно перенаправиться на эндпоинт, например, /refresh, который обновит токены для пользователя.
Code Review
Добрый день! Отличная работа, есть предложения по улучшению :)
- В эндпоинтах содержится бизнес логика. И если мы, например, захотим ее переиспользовать. Например, добавить новый эндпоинт с похожим функционалом. Нам придется переписывать старые эндпоинты, чтобы соответствовать
DRY
(https://web-creator.ru/articles/dry). Поэтому необходимо сразу всю бизнес логику выделять в отдельные модули/классы/функции, чтобы потом можно было удобно ими пользоваться - Выдача истории входов пользователя должна быть с пагинацией, там через время там будет огромное количество записей
- Почему весь модуль закомментирован?
- Здесь можно просто
bool(user)
- Здесь лучше сузить класс перехватываемых исключений, т.к перехватывание всех может привести к багам, которые будет сложно отследить
- Здесь перехватываются исключения из
requests
, а нужно изredis.exceptions
- https://github.com/redis/redis-py/blob/master/redis/exceptions.py - Здесь лучше логировать через
logging
для консистентности - Лишний try/except, т.к нет обработки исключения
Реализовать функционал регистрации пользователя
Информация о самом пользователе будет содержать:
- id
- login
- password
- first_name
- last_name
- created_at
- updated_at
Реализовать функционал изменения логина и пароля
Пока изменение логина и пароля должно осуществляться без подтверждения по email.
Написать функциональные тесты для проекта
Добавление консольной команды для создания суперпользователя
Добавьте консольную команду для создания суперпользователя, которому всегда разрешено делать все действия в системе.
Реализовать функционал назначения/отбора роли у пользователя
Реализовать функционал назначения/отбора роли у пользователя.
Реализовать функционал истории входов в аккаунт
Пользователь должен иметь доступ к истории входов в свой аккаунт.
Нужно будет хранить в Redis невалидные access
токены.
В PostgreSQL храним refresh
токены.
Не удаляем refresh токен, а просто ставим метку о его невалидности в PostgreSQL. Индекс с условием (Исключить невалидные записи из индекса).
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.