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

Подробнее здесь: https://stackoverflow.com/questions/788 ... -in-django

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