Как перенаправить обратный вызов oauth с параметрами GET в другое представление в DjangoPython

Программы на Python
Anonymous
Как перенаправить обратный вызов oauth с параметрами GET в другое представление в Django

Сообщение Anonymous »

Я пытаюсь обработать обратный вызов 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

Вернуться в «Python»