### 🔄 Изменения - **SQLAlchemy KeyError** - исправление ошибки `KeyError: Reaction` при инициализации - **Исправлена ошибка SQLAlchemy**: Устранена проблема `InvalidRequestError: When initializing mapper Mapper[Shout(shout)], expression Reaction failed to locate a name (Reaction)` ### 🧪 Тестирование - **Исправление тестов** - адаптация к новой структуре моделей - **RBAC инициализация** - добавление `rbac.initialize_rbac()` в `conftest.py` - **Создан тест для getSession**: Добавлен комплексный тест `test_getSession_cookies.py` с проверкой всех сценариев - **Покрытие edge cases**: Тесты проверяют работу с валидными/невалидными токенами, отсутствующими пользователями - **Мокирование зависимостей**: Использование unittest.mock для изоляции тестируемого кода ### 🔧 Рефакторинг - **Упрощена архитектура**: Убраны сложные конструкции с отложенными импортами, заменены на чистую архитектуру - **Перемещение моделей** - `Author` и связанные модели перенесены в `orm/author.py`: Вынесены базовые модели пользователей (`Author`, `AuthorFollower`, `AuthorBookmark`, `AuthorRating`) из `orm.author` в отдельный модуль - **Устранены циклические импорты**: Разорван цикл между `auth.core` → `orm.community` → `orm.author` через реструктуризацию архитектуры - **Создан модуль `utils/password.py`**: Класс `Password` вынесен в utils для избежания циклических зависимостей - **Оптимизированы импорты моделей**: Убран прямой импорт `Shout` из `orm/community.py`, заменен на строковые ссылки ### 🔧 Авторизация с cookies - **getSession теперь работает с cookies**: Мутация `getSession` теперь может получать токен из httpOnly cookies даже без заголовка Authorization - **Убрано требование авторизации**: `getSession` больше не требует декоратор `@login_required`, работает автономно - **Поддержка dual-авторизации**: Токен может быть получен как из заголовка Authorization, так и из cookie `session_token` - **Автоматическая установка cookies**: Middleware автоматически устанавливает httpOnly cookies при успешном `getSession` - **Обновлена GraphQL схема**: `SessionInfo` теперь содержит поля `success`, `error` и опциональные `token`, `author` - **Единообразная обработка токенов**: Все модули теперь используют централизованные функции для работы с токенами - **Улучшена обработка ошибок**: Добавлена детальная валидация токенов и пользователей в `getSession` - **Логирование операций**: Добавлены подробные логи для отслеживания процесса авторизации ### 📝 Документация - **Обновлена схема GraphQL**: `SessionInfo` тип теперь соответствует новому формату ответа - Обновлена документация RBAC - Обновлена документация авторизации с cookies
This commit is contained in:
@@ -99,6 +99,22 @@
|
||||
- `VerificationTokenManager`: Токены для подтверждения email, телефона, смены пароля
|
||||
- `OAuthTokenManager`: Управление OAuth токенами для внешних провайдеров
|
||||
|
||||
## Авторизация с cookies
|
||||
|
||||
- **getSession без токена**: Мутация `getSession` теперь работает с httpOnly cookies даже без заголовка Authorization
|
||||
- **Dual-авторизация**: Поддержка как токенов в заголовках, так и cookies для максимальной совместимости
|
||||
- **Автоматические cookies**: Middleware автоматически устанавливает httpOnly cookies при успешной авторизации
|
||||
- **Безопасность**: Использование httpOnly, secure и samesite cookies для защиты от XSS и CSRF атак
|
||||
- **Сессии без перелогина**: Пользователи остаются авторизованными между сессиями браузера
|
||||
|
||||
## DRY архитектура авторизации
|
||||
|
||||
- **Централизованные функции**: Все функции для работы с токенами и авторизацией находятся в `auth/utils.py`
|
||||
- **Устранение дублирования**: Единая логика проверки авторизации используется во всех модулях
|
||||
- **Единообразная обработка**: Стандартизированный подход к извлечению токенов из cookies и заголовков
|
||||
- **Улучшенная тестируемость**: Мокирование централизованных функций упрощает тестирование
|
||||
- **Легкость поддержки**: Изменения в логике авторизации требуют правки только в одном месте
|
||||
|
||||
## E2E тестирование с Playwright
|
||||
|
||||
- **Автоматизация браузера**: Полноценное тестирование пользовательского интерфейса админ-панели
|
||||
|
||||
Reference in New Issue
Block a user