Как ответить
В последнее время я работал над pet-проектом — веб-приложением для управления личными задачами. Наиболее интересным для меня стало проектирование системы аутентификации и авторизации пользователей с использованием JWT, потому что я впервые столкнулся с реализацией безопасности на бэкенде и хотел сделать это правильно.
Проект собран на стеке: бэкенд на Flask с SQLAlchemy и PostgreSQL, фронтенд на React с React Router, всё завернуто в Docker для локальной разработки. Основная функциональность — CRUD для задач, фильтрация по статусу и срокам, а также ролевая модель (админ и обычный пользователь).
Самая сложная часть — аутентификация. Я реализовал регистрацию и логин с выдачей access и refresh токенов, защиту эндпоинтов с помощью декораторов, обработку истечения токена и обновление через refresh. Столкнулся с проблемой хранения refresh токена на клиенте: первоначально хранил в localStorage, но после прочтения рекомендаций OWASP переделал на httpOnly cookie для уменьшения риска XSS. Это потребовало переписать логику на бэкенде и добавить CORS-настройки для работы с куками.
Ещё интересной была задача оптимизации запроса для получения задач с пагинацией и сортировкой по нескольким полям. Без индексов база тормозила на 1000 записей — добавил составные индексы в PostgreSQL, и время выполнения сократилось с 1.2 сек до 30 мс. На этом примере я глубже понял, как работают планы запросов и EXPLAIN ANALYZE.Из менее технического — настройка CI/CD через GitHub Actions: автотесты, линтинг и деплой на бесплатный хостинг (Railway). Это было интересно, потому что раньше я не автоматизировал развертывание, и теперь вижу, как это сокращает рутину.
- Реализовал JWT-аутентификацию (access/refresh) с хранением refresh в httpOnly cookie.
- Оптимизировал пагинированный запрос с сортировкой через составные индексы (ускорение в 40 раз).
- Настроил CI/CD на GitHub Actions: тесты, линтер, автодеплой.
- Переписал клиентское хранение токенов с localStorage на httpOnly cookie по соображениям безопасности.
- Изучил работу с Docker и docker-compose для локального запуска бэкенда и БД.