Я пытаюсь обработать обратный вызов Google oauth2 для своего приложения, которое использует поддомены для каждого клиента. Пользователь отправляет запрос на авторизацию с сайта customer1.example.com/login, но Google требует одну страницу обратного вызова, например
www.example.com/callback, для всех возможных поддоменов. Я кодирую поддомен customer1 в параметре состояния oauth. Я хочу прочитать субдомен в одном представлении, а затем перенаправить весь обратный вызов, параметры и все остальное на новую страницу внутри субдомена, например customer1.example.com/callback. Вот как я это делаю сейчас:
urls.py
Код: Выделить всё
urlpatterns = [
...
path('callback/', views.gcallback, name='g_callback')
...
]
views.py
Код: Выделить всё
from subdomains import reverse #like reverse(), but supports subdomains
from django.shortcuts import redirect
def init_callback(request):
state = request.GET.get('state')
subdom = state.split('%')[0]
#get parameter string from current uri
auth_uri = request.build_absolute_uri()
google_param_string = auth_uri.split('?')[1]
redir_url = reverse('users:g_callback', subdomain=subdom)
#reappending GET parameters to URL
redir_url = f'{redir_url}?{google_param_string}'
return redirect(redir_url)
Хотя это работает, есть ли способ просто перенаправить на новую страницу с исходными параметрами? Что-то вроде:
Код: Выделить всё
def gcallback(request):
subdom = request.GET.get('state').split('%')[0]
redir_url = reverse('users:g_callback', subdomain = subdom)
return redirect(redir_url, request)
Похоже, что должен быть способ, которого мне не хватает, просто пересылать запрос с одного URL-адреса на другой без необходимости создавать URI и удалять из него строку параметров.
Подробнее здесь:
https://stackoverflow.com/questions/788 ... -in-django