У меня есть приложение-трясогузка, которое должно войти в систему и аутентифицировать пользователей для секции /admin
с помощью OAuth. Взаимодействие с поставщиком OAuth работает нормально только в конце представления authorize
. Я получаю ошибку Too many redirects
. Вот мой смысл:
SESSION_KEY = 'access_token'
oauth = OAuth()
oauth_client = oauth.remote_app(#oauth client setup here)
Просмотры
def login(request):
"""
This view is redirecting to my oauth provider, log the user
and redirect back to /authorize with the data in the request.
"""
return HttpResponseRedirect(oauth_client.authorize(
callback='http://localhost/admin/authorize'))
def authorize(request):
resp = oauth_client.authorized_response(request.GET)
request.session[SESSION_KEY] = (resp['access_token'], '')
data = baton.get('/oauth/me')
username = json.loads(data.data).get('username')
user, _ = User.objects.get_or_create(
username=username,
defaults={'password': username, 'is_superuser': True}
)
auth_user = authenticate(username=username, password=username)
login(auth_user)
return HttpResponseRedirect('/admin')
Urls
urlpatterns = [
url(r'^admin/login', login, name='login'),
url(r'^admin/authorize', authorize, name='authorize'),
url(r'^admin/', include(wagtailadmin_urls)),
]
Too many redirects
Я вижу, что в браузерах происходит, когда представление authorize
проверяет все логи c и пытается перенаправить на /admin
, но я думаю, что происходит то, что Wagtail затем перенаправляет снова на /login
, но я хотя и аутентифицируюсь и login
пользователя должно быть достаточно для Wagtail, по-видимому, нет.
Любые идеи, как решить эту проблему, или программно войти в систему администратора Wagtail.