Склонируйте проект:
https://github.com/BernarBerdikul/Auth_sprint_2.git
На одном уровне с папкой проекта "./Auth_sprint_2" создайте папку "./postgres_data" монтирования к образу Postgres
Для запуска проекта следует скопировать файл .env.example и переименовать на .env
cp .env .env.example
Значение некоторых переменных окружения:
- DB_NAME - название основной БД, которая используется в проекте
- DB_TEST_NAME - отдельная БД для запуска и прогонки тестов
- TESTING (True | False) - значение отвечает за использование тестовой БД в проекте или нет
Создание БД может занять много времени, выполним отдельно
docker-compose -f docker-compose.yml build postgres_db
docker-compose -f docker-compose.yml up -d postgres_db
Запустить проект совместно с тестами и помощью Docker
docker-compose -f docker-compose-test.yml build
docker-compose -f docker-compose-test.yml up
Запустить проект с помощью Docker
docker-compose -f docker-compose.yml build
docker-compose -f docker-compose.yml up
После запуска проекта, у вас будет доступ к документаций проекта Ссылка на документацию проекта
Упростите регистрацию и аутентификацию пользователей в Auth-сервисе, добавив вход через социальные сервисы. Список сервисов выбирайте исходя из целевой аудитории онлайн-кинотеатра — подумайте, какими социальными сервисами они пользуются. Например, использовать OAuth от Github — не самая удачная идея. Ваши пользователи не разработчики и вряд ли имеют аккаунт на Github. А вот добавить Twitter, Facebook, VK, Google, Yandex или Mail будет хорошей идеей.
Вам не нужно делать фронтенд в этой задаче и реализовывать собственный сервер OAuth. Нужно реализовать протокол со стороны потребителя.
Информация по OAuth у разных поставщиков данных:
Twitter,
Facebook,
VK,
Google,
Yandex,
Mail.
Реализуйте возможность открепить аккаунт в соцсети от личного кабинета.
Решение залейте в репозиторий текущего спринта и отправьте на ревью.
Реализуйте свой вариант фильтрации ботов для Smart TV. На Smart TV не будет работать noCaptcha, потому что в нём вряд ли есть история, а анализировать поведение пользователя очень сложно из-за механики работы умного телевизора. Вам придётся реализовать каптчу на математических примерах: генерировать простую задачку и отправлять её пользователю.
Подумайте, в какой из баз данных вы будете хранить правильный ответ. Дадите ли вы только один шанс ввести правильный ответ или позволите пользователю ошибаться несколько минут подряд? Станете ли с подозрением относиться к ответам, которые приходят слишком часто для человека?
Подготовьте Auth сервис к интеграции с другими сервисами вашего сайта. Сгенерируйте схему взаимодействия с Auth сервисом в формате, который используется в вашем сервисе.
Создайте интеграцию Auth-сервиса и AsyncAPI-сервиса, используя контракт, который вы сделали в прошлом задании.
При создании интеграции не забудьте учесть изящную деградацию Auth-сервиса. Как вы уже выяснили ранее, Auth сервис один из самых нагруженных, потому что в него ходят большинство сервисов сайта. И если он откажет, сайт отказать не должен. Обязательно учтите этот сценарий в интеграциях с Auth-сервисом.
Добавьте в Auth трасировку и подключите к Jaeger. Для этого вам нужно добавить работу с заголовком x-request-id и отправку трасировок в Jaeger.
Из коробки библиотека jaeger-client предоставляет контекстный менеджер tracer.start_span(), но это не всегда удобно. Например, вы хотите пометить трасировкой не весь код, а отдельные функции.
Сделайте декоратор @trace для трассировок любых функций.
Сейчас сервис Auth беззащитен перед DDOS-атаками. Чтобы сберечь важный элемент системы от чрезмерной нагрузки, которая может вывести его из строя, реализуйте алгоритм Leaky bucket или Token bucket, используя Redis для синхронизации реплик. Впоследствии вы можете делегировать эту обязанность сторонниму инструменту, например, Cloudflare.
Партицируйте таблицу с пользователями. Подумайте, по каким критериям вы бы разделили её. Важно посмотреть на таблицу не только в текущем времени, но и заглядывая в некое будущее, когда в ней будут миллионы записей. Пользователи могут быть из одной страны, но из разных регионов. А еще пользователи могут использовать разные устройства для входа и иметь разные возрастные ограничения.