Я не уверен, проблема ли это в django-stronghold или в самом django.
Что происходит:
- Вызов любого внешнего URL-адреса (например, http://www.myapp.com/careers) приводит меня к страница входа
- Показанный URL-адрес выглядит следующим образом: http://www.myapp.com/accounts/login/?next=/careers
- При входе в систему меня перенаправляют в интерфейс администратора (например, при входе на http://www.myapp.com/admin)
- Отображаемый URL по-прежнему http://www.myapp.com/accounts/login/?next=/careers
Что я хочу:
- При входе в систему я хочу, чтобы меня перенаправляли на исходный URL-адрес, правильно сохраненный в следующем параметре (в примере: http://www.myapp.com/careers)
Моя установка:
Я использую Джанго 1.6.
Как было предложено в документах, я установил django-stronghold через pip и активировал его в своем проекте. вот так:
INSTALLED_APPS = (
...
'stronghold', # last entry
)
MIDDLEWARE_CLASSES = [
...
'stronghold.middleware.LoginRequiredMiddleware', # last entry
]
Сначала я столкнулся с циклом перенаправления, поэтому я определил STRONGHOLD_PUBLIC_URLS:
STRONGHOLD_PUBLIC_URLS = (
r'^/admin.*?$', # Don't touch the admin pages
r'^/accounts/login/$', # Avoid redirect loop
)
Что я пробовал:
- Явная установка LOGIN_URL и LOGIN_REDIRECT_URL, как предлагается здесь, не помогла.
- В контексте входа в интерфейс администратора механизм входа в систему django работает нормально, как это задокументировано здесь:
Вот что делает django.contrib.auth.views.login:
- При вызове через GET он отображает форму входа, которая отправляет POST на тот же URL-адрес. [...]
- При вызове через POST с предоставленными пользователем учетными данными он пытается войти в систему пользователя. Если вход выполнен успешно, представление перенаправляется на URL-адрес, указанный в далее. [...]
- Если я вызову URL-адрес администратора, отличный от .../admin (например, http://www.myapp.com/admin/myapp_base/event/), отображаемый URL-адрес остается прежним, пока отображается форма входа (параметр next отсутствует). После авторизации вижу запрашиваемую страницу.
Идеи?
Есть идеи, почему перенаправление не работает для внешних URL-адресов?