oauth-fix
All checks were successful
Deploy on push / deploy (push) Successful in 3m7s

This commit is contained in:
2025-09-29 13:59:49 +03:00
parent f10c29c9ca
commit 8e944e399a

View File

@@ -679,6 +679,7 @@ async def oauth_login_http(request: Request) -> JSONResponse | RedirectResponse:
async def oauth_callback_http(request: Request) -> JSONResponse | RedirectResponse:
"""HTTP handler для OAuth callback"""
logger.info("🔄 OAuth callback started")
try:
# 🚫 Блокируем запросы от ботов (GPTBot, crawlers)
user_agent = request.headers.get("user-agent", "").lower()
@@ -871,6 +872,7 @@ async def oauth_callback_http(request: Request) -> JSONResponse | RedirectRespon
logger.info(f"🔄 Step 3: Creating or updating user for {provider}...")
try:
author = await _create_or_update_user(provider, profile)
logger.info("✅ Step 3 completed: User created/updated successfully")
except Exception as e:
logger.error(f"❌ Exception while creating/updating user for {provider}: {e}", exc_info=True)
raise # Re-raise для обработки в основном except блоке
@@ -900,6 +902,7 @@ async def oauth_callback_http(request: Request) -> JSONResponse | RedirectRespon
"ip": request.client.host if hasattr(request, "client") and request.client else None,
},
)
logger.info("✅ Step 4 completed: Session token created successfully")
except Exception as e:
logger.error(f"❌ Exception while creating session token for {provider}: {e}", exc_info=True)
raise # Re-raise для обработки в основном except блоке
@@ -960,6 +963,7 @@ async def oauth_callback_http(request: Request) -> JSONResponse | RedirectRespon
logger.info(f" - User ID: {author.id}")
# 🔗 Редиректим с токеном в URL
logger.info("🔄 Step 5: Creating redirect response...")
response = RedirectResponse(url=final_redirect_url, status_code=307)
logger.info(f"✅ OAuth: токен передан в URL для user_id={author.id}")
@@ -972,7 +976,9 @@ async def oauth_callback_http(request: Request) -> JSONResponse | RedirectRespon
logger.info(f" - URL length: {len(final_redirect_url)}")
logger.info(f" - Contains token: {'access_token=' in final_redirect_url}")
logger.info("✅ Step 5 completed: Redirect response created successfully")
logger.info(f"✅ OAuth успешно завершен для {provider}, user_id={author.id}")
logger.info("🔄 Returning redirect response to client...")
return response
except Exception as e:
@@ -993,11 +999,11 @@ async def oauth_callback_http(request: Request) -> JSONResponse | RedirectRespon
if not isinstance(fallback_redirect, str):
fallback_redirect = FRONTEND_URL
# Для testing.discours.io используем специальный формат
# Для testing.discours.io используем главную страницу (так как /oauth редиректит на /)
if "testing.discours.io" in fallback_redirect:
from urllib.parse import quote
error_url = f"https://testing.discours.io/oauth?error=auth_failed&provider={provider}&redirect_url={quote(fallback_redirect)}"
error_url = f"https://testing.discours.io/?error=auth_failed&provider={provider}&redirect_url={quote(fallback_redirect)}"
else:
error_url = f"{fallback_redirect}?error=auth_failed&provider={provider}"