This commit is contained in:
@@ -527,23 +527,24 @@ async def oauth_callback(request: Any) -> JSONResponse | RedirectResponse:
|
||||
# Создаем ответ с редиректом
|
||||
response = RedirectResponse(url=final_redirect_url)
|
||||
|
||||
# 🔍 Диагностика перед установкой cookie
|
||||
logger.info(f"🔍 Готовимся установить cookie для redirect на: {parsed_redirect.netloc}")
|
||||
logger.info(f"🔍 Текущие настройки cookie: secure={SESSION_COOKIE_SECURE}, samesite={SESSION_COOKIE_SAMESITE}")
|
||||
|
||||
# 🍪 Устанавливаем httpOnly cookie для безопасности
|
||||
# 💋 Исправляем domain для testing.discours.io - не используем wildcard domain
|
||||
cookie_domain = None # Убираем wildcard domain для корректной работы
|
||||
cookie_samesite = SESSION_COOKIE_SAMESITE
|
||||
|
||||
if "discours.io" in parsed_redirect.netloc and "testing.discours.io" not in parsed_redirect.netloc:
|
||||
cookie_domain = ".discours.io" # Только для основного домена
|
||||
elif "testing.discours.io" in parsed_redirect.netloc:
|
||||
# 💋 Для testing.discours.io используем None domain и SameSite=Lax для лучшей совместимости
|
||||
# SameSite=None требует Secure=True, что может не работать если HTTPS_ENABLED неправильно настроен
|
||||
cookie_domain = None
|
||||
cookie_samesite = "lax" # Более безопасный вариант для same-site запросов
|
||||
if "discours.io" in parsed_redirect.netloc:
|
||||
# 💋 ЭКСТРЕННОЕ ИСПРАВЛЕНИЕ: Используем wildcard domain для всех discours.io
|
||||
cookie_domain = ".discours.io" # Работает для всех поддоменов включая testing.discours.io
|
||||
cookie_samesite = "lax" # Безопасный вариант для same-site запросов
|
||||
|
||||
# 💋 Принудительно включаем Secure для testing.discours.io (всегда HTTPS)
|
||||
# 💋 Принудительно включаем Secure для всех discours.io доменов (всегда HTTPS)
|
||||
cookie_secure = SESSION_COOKIE_SECURE
|
||||
if "testing.discours.io" in parsed_redirect.netloc:
|
||||
cookie_secure = True # testing.discours.io всегда использует HTTPS
|
||||
if "discours.io" in parsed_redirect.netloc:
|
||||
cookie_secure = True # Все discours.io домены используют HTTPS
|
||||
|
||||
response.set_cookie(
|
||||
SESSION_COOKIE_NAME,
|
||||
@@ -556,6 +557,14 @@ async def oauth_callback(request: Any) -> JSONResponse | RedirectResponse:
|
||||
domain=cookie_domain, # Поддержка поддоменов только для основного домена
|
||||
)
|
||||
|
||||
# 🔍 Дополнительная диагностика cookie
|
||||
logger.warning("🚨 ВАЖНО: Cookie должен быть установлен в браузере и отправляться в последующих запросах!")
|
||||
logger.warning("🚨 Если cookie не передается, проверьте:")
|
||||
logger.warning(f" - Браузер принимает cookie с domain={cookie_domain}")
|
||||
logger.warning(f" - HTTPS работает правильно (secure={cookie_secure})")
|
||||
logger.warning(f" - SameSite политика не блокирует (samesite={cookie_samesite})")
|
||||
logger.warning(" - Path='/' доступен для всех запросов")
|
||||
|
||||
logger.info(f"OAuth успешно завершен для {provider}, user_id={author.id}")
|
||||
return response
|
||||
|
||||
@@ -874,18 +883,15 @@ async def oauth_callback_http(request: Request) -> JSONResponse | RedirectRespon
|
||||
cookie_domain = None # Убираем wildcard domain для корректной работы
|
||||
cookie_samesite = SESSION_COOKIE_SAMESITE
|
||||
|
||||
if "discours.io" in parsed_redirect.netloc and "testing.discours.io" not in parsed_redirect.netloc:
|
||||
cookie_domain = ".discours.io" # Только для основного домена
|
||||
elif "testing.discours.io" in parsed_redirect.netloc:
|
||||
# 💋 Для testing.discours.io используем None domain и SameSite=Lax для лучшей совместимости
|
||||
# SameSite=None требует Secure=True, что может не работать если HTTPS_ENABLED неправильно настроен
|
||||
cookie_domain = None
|
||||
cookie_samesite = "lax" # Более безопасный вариант для same-site запросов
|
||||
if "discours.io" in parsed_redirect.netloc:
|
||||
# 💋 ЭКСТРЕННОЕ ИСПРАВЛЕНИЕ: Используем wildcard domain для всех discours.io
|
||||
cookie_domain = ".discours.io" # Работает для всех поддоменов включая testing.discours.io
|
||||
cookie_samesite = "lax" # Безопасный вариант для same-site запросов
|
||||
|
||||
# 💋 Принудительно включаем Secure для testing.discours.io (всегда HTTPS)
|
||||
# 💋 Принудительно включаем Secure для всех discours.io доменов (всегда HTTPS)
|
||||
cookie_secure = SESSION_COOKIE_SECURE
|
||||
if "testing.discours.io" in parsed_redirect.netloc:
|
||||
cookie_secure = True # testing.discours.io всегда использует HTTPS
|
||||
if "discours.io" in parsed_redirect.netloc:
|
||||
cookie_secure = True # Все discours.io домены используют HTTPS
|
||||
|
||||
response.set_cookie(
|
||||
SESSION_COOKIE_NAME,
|
||||
@@ -910,6 +916,15 @@ async def oauth_callback_http(request: Request) -> JSONResponse | RedirectRespon
|
||||
else f"🔍 Session token: {session_token}"
|
||||
)
|
||||
logger.info(f"🔗 Final redirect: {final_redirect_url}")
|
||||
|
||||
# 🔍 Дополнительная диагностика cookie
|
||||
logger.warning("🚨 ВАЖНО: Cookie должен быть установлен в браузере и отправляться в последующих запросах!")
|
||||
logger.warning("🚨 Если cookie не передается, проверьте:")
|
||||
logger.warning(f" - Браузер принимает cookie с domain={cookie_domain}")
|
||||
logger.warning(f" - HTTPS работает правильно (secure={cookie_secure})")
|
||||
logger.warning(f" - SameSite политика не блокирует (samesite={cookie_samesite})")
|
||||
logger.warning(" - Path='/' доступен для всех запросов")
|
||||
|
||||
logger.info(f"✅ OAuth успешно завершен для {provider}, user_id={author.id}")
|
||||
return response
|
||||
|
||||
|
||||
Reference in New Issue
Block a user