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