Как перенаправить обратный вызов oauth с параметрами GET на другое представление в Django
Я пытаюсь обработать обратный вызов Google oauth2 для моего приложения, которое использует субдомены для каждого клиента. Пользователь делает запрос авторизации с customer1.example.com/login, но Google требует единую страницу обратного вызова, например www.example.com/callback для всех возможных субдоменов. Я кодирую субдомен customer1 в параметре oauth state. Я хочу прочитать субдомен в одном представлении, а затем перенаправить весь обратный вызов, параметры и все остальное, на новую страницу в пределах субдомена, например 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
from django.utils.http import url encode
def gcallback(request):
state = request.GET.get('state')
subdom = state.split('%')[0]
scope = request.GET.get('scope')
code = request.GET.get('code')
redir_url = reverse('users:g_callback', subdomain=subdom)
#reappending GET parameters to URL
param_string = urlencode(f'{state}&{code}&{scope}')
redir_url = f'{redir_url}?{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)
Я просто пытаюсь избавиться от необходимости заново создавать строку параметров - особенно учитывая, что Google может добавить параметры в запрос обратного вызова в любой момент.