This commit is contained in:
parent
b01de1fdc1
commit
5cfde98c22
|
@ -2,6 +2,10 @@
|
||||||
|
|
||||||
## [0.5.10] - 2025-06-30
|
## [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 приглашений
|
### Новая функциональность CRUD приглашений
|
||||||
|
|
||||||
- **НОВОЕ**: Полноценное управление приглашениями в админ-панели:
|
- **НОВОЕ**: Полноценное управление приглашениями в админ-панели:
|
||||||
|
|
|
@ -99,52 +99,43 @@ async def authenticate(request) -> AuthState:
|
||||||
AuthState: Состояние аутентификации
|
AuthState: Состояние аутентификации
|
||||||
"""
|
"""
|
||||||
from auth.decorators import get_auth_token
|
from auth.decorators import get_auth_token
|
||||||
from auth.tokens.sessions import SessionTokenManager
|
|
||||||
from utils.logger import root_logger as logger
|
from utils.logger import root_logger as logger
|
||||||
|
|
||||||
logger.debug("[authenticate] Начало аутентификации")
|
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)
|
token = get_auth_token(request)
|
||||||
if not token:
|
if not token:
|
||||||
logger.warning("[authenticate] Токен не найден в запросе")
|
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.error = "No authentication token provided"
|
||||||
auth_state.token = None
|
|
||||||
return auth_state
|
return auth_state
|
||||||
|
|
||||||
logger.debug(f"[authenticate] Токен найден, длина: {len(token)}")
|
logger.debug(f"[authenticate] Токен найден, длина: {len(token)}")
|
||||||
|
|
||||||
# Проверяем токен
|
# Проверяем токен
|
||||||
try:
|
try:
|
||||||
# Создаем экземпляр SessionTokenManager
|
# Используем TokenManager вместо прямого создания SessionTokenManager
|
||||||
session_manager = SessionTokenManager()
|
auth_result = await TokenManager.verify_session(token)
|
||||||
# Проверяем токен
|
|
||||||
auth_result = await session_manager.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}")
|
logger.debug(f"[authenticate] Успешная аутентификация, user_id: {auth_result.user_id}")
|
||||||
auth_state = AuthState()
|
|
||||||
auth_state.logged_in = True
|
auth_state.logged_in = True
|
||||||
auth_state.author_id = auth_result.user_id
|
auth_state.author_id = auth_result.user_id
|
||||||
auth_state.error = None
|
|
||||||
auth_state.token = token
|
auth_state.token = token
|
||||||
return auth_state
|
return auth_state
|
||||||
|
|
||||||
error_msg = "Invalid or expired token"
|
error_msg = "Invalid or expired token"
|
||||||
logger.warning(f"[authenticate] Недействительный токен: {error_msg}")
|
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.error = error_msg
|
||||||
auth_state.token = None
|
|
||||||
return auth_state
|
return auth_state
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"[authenticate] Ошибка при проверке токена: {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.error = f"Authentication error: {e!s}"
|
||||||
auth_state.token = None
|
|
||||||
return auth_state
|
return auth_state
|
||||||
|
|
|
@ -780,13 +780,14 @@ async def admin_get_invites(
|
||||||
"id": invite.inviter.id,
|
"id": invite.inviter.id,
|
||||||
"name": invite.inviter.name or "Без имени",
|
"name": invite.inviter.name or "Без имени",
|
||||||
"email": invite.inviter.email,
|
"email": invite.inviter.email,
|
||||||
"slug": invite.inviter.slug,
|
"slug": invite.inviter.slug
|
||||||
|
or f"user-{invite.inviter.id}", # Добавляем значение по умолчанию
|
||||||
},
|
},
|
||||||
"author": {
|
"author": {
|
||||||
"id": invite.author.id,
|
"id": invite.author.id,
|
||||||
"name": invite.author.name or "Без имени",
|
"name": invite.author.name or "Без имени",
|
||||||
"email": invite.author.email,
|
"email": invite.author.email,
|
||||||
"slug": invite.author.slug,
|
"slug": invite.author.slug or f"user-{invite.author.id}", # Добавляем значение по умолчанию
|
||||||
},
|
},
|
||||||
"shout": {
|
"shout": {
|
||||||
"id": invite.shout.id,
|
"id": invite.shout.id,
|
||||||
|
@ -796,7 +797,8 @@ async def admin_get_invites(
|
||||||
"id": invite.shout.created_by_author.id,
|
"id": invite.shout.created_by_author.id,
|
||||||
"name": invite.shout.created_by_author.name or "Без имени",
|
"name": invite.shout.created_by_author.name or "Без имени",
|
||||||
"email": invite.shout.created_by_author.email,
|
"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 поля в текущей модели
|
"created_at": None, # У приглашений нет created_at поля в текущей модели
|
||||||
|
|
Loading…
Reference in New Issue
Block a user