diff --git a/CHANGELOG.md b/CHANGELOG.md index d8043ff0..6bf4a58c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## [0.5.10] - 2025-06-30 +### auth/internal fix +- Исправлена ошибка в функции `authenticate` в файле `auth/internal.py` - неправильное создание объекта `AuthState` и использование `TokenManager` вместо прямого создания `SessionTokenManager` +- Исправлена ошибка в функции `admin_get_invites` в файле `resolvers/admin.py` - добавлено значение по умолчанию для поля `slug` в объектах `Author`, чтобы избежать ошибки "Cannot return null for non-nullable field Author.slug" + ### Новая функциональность CRUD приглашений - **НОВОЕ**: Полноценное управление приглашениями в админ-панели: diff --git a/auth/internal.py b/auth/internal.py index 1a33efe5..5db02f1d 100644 --- a/auth/internal.py +++ b/auth/internal.py @@ -99,52 +99,43 @@ async def authenticate(request) -> AuthState: AuthState: Состояние аутентификации """ from auth.decorators import get_auth_token - from auth.tokens.sessions import SessionTokenManager from utils.logger import root_logger as logger logger.debug("[authenticate] Начало аутентификации") + # Создаем объект AuthState + auth_state = AuthState() + auth_state.logged_in = False + auth_state.author_id = None + auth_state.error = None + auth_state.token = None + # Получаем токен из запроса token = get_auth_token(request) if not token: logger.warning("[authenticate] Токен не найден в запросе") - auth_state = AuthState() - auth_state.logged_in = False - auth_state.author_id = None auth_state.error = "No authentication token provided" - auth_state.token = None return auth_state logger.debug(f"[authenticate] Токен найден, длина: {len(token)}") # Проверяем токен try: - # Создаем экземпляр SessionTokenManager - session_manager = SessionTokenManager() - # Проверяем токен - auth_result = await session_manager.verify_session(token) + # Используем TokenManager вместо прямого создания SessionTokenManager + auth_result = await TokenManager.verify_session(token) - if auth_result and hasattr(auth_result, "user_id"): + if auth_result and hasattr(auth_result, "user_id") and auth_result.user_id: logger.debug(f"[authenticate] Успешная аутентификация, user_id: {auth_result.user_id}") - auth_state = AuthState() auth_state.logged_in = True auth_state.author_id = auth_result.user_id - auth_state.error = None auth_state.token = token return auth_state + error_msg = "Invalid or expired token" logger.warning(f"[authenticate] Недействительный токен: {error_msg}") - auth_state = AuthState() - auth_state.logged_in = False - auth_state.author_id = None auth_state.error = error_msg - auth_state.token = None return auth_state except Exception as e: logger.error(f"[authenticate] Ошибка при проверке токена: {e}") - auth_state = AuthState() - auth_state.logged_in = False - auth_state.author_id = None auth_state.error = f"Authentication error: {e!s}" - auth_state.token = None return auth_state diff --git a/resolvers/admin.py b/resolvers/admin.py index 2b8cbe1d..db244c78 100644 --- a/resolvers/admin.py +++ b/resolvers/admin.py @@ -780,13 +780,14 @@ async def admin_get_invites( "id": invite.inviter.id, "name": invite.inviter.name or "Без имени", "email": invite.inviter.email, - "slug": invite.inviter.slug, + "slug": invite.inviter.slug + or f"user-{invite.inviter.id}", # Добавляем значение по умолчанию }, "author": { "id": invite.author.id, "name": invite.author.name or "Без имени", "email": invite.author.email, - "slug": invite.author.slug, + "slug": invite.author.slug or f"user-{invite.author.id}", # Добавляем значение по умолчанию }, "shout": { "id": invite.shout.id, @@ -796,7 +797,8 @@ async def admin_get_invites( "id": invite.shout.created_by_author.id, "name": invite.shout.created_by_author.name or "Без имени", "email": invite.shout.created_by_author.email, - "slug": invite.shout.created_by_author.slug, + "slug": invite.shout.created_by_author.slug + or f"user-{invite.shout.created_by_author.id}", # Добавляем значение по умолчанию }, }, "created_at": None, # У приглашений нет created_at поля в текущей модели