Как перенаправить обратный вызов 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 может добавить параметры в запрос обратного вызова в любой момент.

Вернуться на верх