This commit is contained in:
@@ -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}"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user