### Fixed - 🔧 **OAuth Callback URL**: Исправлено формирование callback URL - добавлен отсутствующий слеш между доменом и путем - 🔒 **OAuth HTTPS**: Принудительное использование HTTPS для callback URL в продакшне (исправляет ошибку "redirect_uri is not associated") ### Changed - 🔄 **OAuth Routes**: Возвращены к стандартному формату `/oauth/{provider}` - провайдеры не передают параметр provider в callback
This commit is contained in:
@@ -407,8 +407,11 @@ async def oauth_login(_: None, _info: GraphQLResolveInfo, provider: str, callbac
|
||||
}
|
||||
await store_oauth_state(state, oauth_data)
|
||||
|
||||
# Callback должен идти на backend, получаем из base_url (который должен быть backend URL)
|
||||
oauth_callback_uri = f"{callback_data['base_url'].rstrip('/')}/oauth/{provider}/callback"
|
||||
# Callback должен идти на backend с принудительным HTTPS для продакшна
|
||||
base_url = callback_data["base_url"].rstrip("/")
|
||||
# Принудительно HTTPS
|
||||
base_url = base_url.replace("http://", "https://")
|
||||
oauth_callback_uri = f"{base_url}/oauth/{provider}/callback"
|
||||
|
||||
try:
|
||||
return await client.authorize_redirect(
|
||||
@@ -547,8 +550,9 @@ async def oauth_login_http(request: Request) -> JSONResponse | RedirectResponse:
|
||||
}
|
||||
await store_oauth_state(state, oauth_data)
|
||||
|
||||
# Получаем backend URL из request
|
||||
backend_url = request.url.scheme + "://" + request.url.netloc
|
||||
# Получаем backend URL из request (принудительно HTTPS для продакшна)
|
||||
scheme = "https" if request.url.netloc != "localhost:8000" else request.url.scheme
|
||||
backend_url = f"{scheme}://{request.url.netloc}"
|
||||
callback_uri = f"{backend_url}/oauth/{provider}/callback"
|
||||
|
||||
# 🔍 Создаем redirect URL вручную (обходим использование request.session в authlib)
|
||||
|
||||
Reference in New Issue
Block a user