Я нашел форму утечки информации при использовании @login_required декоратора и установке переменной LOGIN_URL.
У меня есть сайт, который требует обязательного входа в систему для всего содержания. Проблема состоит в том, что Вы перенаправляетесь к странице входа в систему со следующим переменным набором, когда это - существующая страница.
Таким образом, при отсутствии входа в систему и просьба о:
http://localhost:8000/validurl/
Вы видите это:
http://localhost:8000/login/?next=/validurl/
И при запросе не существующей страницы:
http://localhost:8000/faultyurl/
Вы видите это:
http://localhost:8000/login/
Который показывает некоторую информацию, которую я не хочу. Я думал о переопределении метода входа в систему, принуждении рядом с пустым и вызовом 'супер' на этом разделенном на подклассы методе.
Дополнительная проблема состоит в том, что некоторые мои тесты перестали работать без набора LOGIN_URL. они перенаправляют к '/accounts/login /' вместо '/login / '. Следовательно, почему я хотел бы использовать LOGIN_URL, но отключить 'автоматическую следующую' опцию.
Кто-либо, который может пролить некоторый свет на предмет?
Большое спасибо.
Gerard.
Вы можете включить эту строку в качестве последнего шаблона в вашем файле URLS.PY
. Он будет повторно маршрут URL-адресов, которые не соответствуют другим шаблонам на странице входа.
urlpatterns = patterns('',
...
(r'^(?P<path>.+)$', 'django.views.generic.simple.redirect_to', {
'url': '/login/?next=/%(path)s',
'permanent': False
}),
)
Отредактировать: Чтобы продолжить повышение 404 страниц для аутентифицированных пользователей, выполните следующие действия:
from django.http import Http404, HttpResponseRedirect
def fake_redirect(request, path):
if request.user.is_authenticated:
raise Http404()
else:
return HttpResponseRedirect('/login/?next=/%s' % path)
urlpatterns = patterns('',
...
(r'^(?P<path>.+)$', fake_redirect),
)