oauth-redirect-uri-fix
All checks were successful
Deploy on push / deploy (push) Successful in 2m54s
All checks were successful
Deploy on push / deploy (push) Successful in 2m54s
This commit is contained in:
@@ -674,12 +674,25 @@ async def oauth_callback_http(request: Request) -> JSONResponse | RedirectRespon
|
||||
logger.info(f"🔧 Authorization response URL: {request.url}")
|
||||
logger.info(f"🔧 Code parameter: {code[:20]}..." if code and len(code) > 20 else f"🔧 Code parameter: {code}")
|
||||
|
||||
# Получаем БАЗОВЫЙ backend URL (только схема + хост, без пути!)
|
||||
scheme = "https" if request.url.netloc != "localhost:8000" else request.url.scheme
|
||||
backend_base_url = f"{scheme}://{request.url.netloc}"
|
||||
|
||||
# Получаем callback URI (тот же, что использовался при авторизации)
|
||||
callback_uri = f"{backend_base_url}/oauth/{provider}/callback"
|
||||
try:
|
||||
if provider in ["vk", "yandex", "telegram", "facebook"]:
|
||||
# Провайдеры без PKCE поддержки (Facebook может иметь проблемы с PKCE)
|
||||
logger.info(f"🔧 Using OAuth without PKCE for {provider}")
|
||||
token = await client.fetch_access_token(
|
||||
authorization_response=str(request.url),
|
||||
logger.info(f"🔧 Callback URI: {callback_uri}")
|
||||
|
||||
# Используем более низкоуровневый подход для передачи redirect_uri
|
||||
token = await client.fetch_token(
|
||||
client.token_endpoint,
|
||||
grant_type="authorization_code",
|
||||
code=code,
|
||||
redirect_uri=callback_uri,
|
||||
client_id=client.client_id,
|
||||
)
|
||||
else:
|
||||
# Провайдеры с PKCE поддержкой
|
||||
@@ -690,9 +703,16 @@ async def oauth_callback_http(request: Request) -> JSONResponse | RedirectRespon
|
||||
|
||||
logger.info(f"🔧 Using OAuth with PKCE for {provider}")
|
||||
logger.info(f"🔧 Code verifier length: {len(code_verifier) if code_verifier else 0}")
|
||||
token = await client.fetch_access_token(
|
||||
authorization_response=str(request.url),
|
||||
logger.info(f"🔧 Callback URI: {callback_uri}")
|
||||
|
||||
# Используем более низкоуровневый подход для передачи redirect_uri
|
||||
token = await client.fetch_token(
|
||||
client.token_endpoint,
|
||||
grant_type="authorization_code",
|
||||
code=code,
|
||||
redirect_uri=callback_uri,
|
||||
code_verifier=code_verifier,
|
||||
client_id=client.client_id,
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Failed to fetch access token for {provider}: {e}", exc_info=True)
|
||||
|
||||
Reference in New Issue
Block a user