Я пишу немного промежуточного программного обеспечения, чтобы эффективно сделать @login_required
на всех страницах. К сожалению, то, что у меня есть, приводит к циклу перенаправления.
Реализация использует промежуточное ПО «старого» стиля с 1.10 через MiddlewareMixin
и process_request()
хук в попытке перенаправить на страницу входа всякий раз, когда пользователь не аутентифицирован.
Во-первых, я использую URL-адреса аутентификации по умолчанию django.contrib.auth.urls
. В документах говорится :
Это будет включать следующие шаблоны URL:
^login/$ [name='login']
...
# main URLConf urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('django.contrib.auth.urls')), # https://docs.djangoproject.com/en/1.10/topics/auth/default/#module-django.contrib.auth.views
]
Тогда вот промежуточное ПО (да, оно добавлено в MIDDLEWARE
в settings.py
):
from django.http import HttpResponseRedirect
from django.utils.deprecation import MiddlewareMixin
class LoginRequiredMiddleware(MiddlewareMixin):
def process_request(self, request):
if not request.user.is_authenticated():
return HttpResponseRedirect('/login/')
Страница/функции входа в систему отлично работают, когда мое промежуточное ПО не включено, в то время как его включение приводит к тому, что каждый URL-адрес вызывает ERR_TOO_MANY_REDIRECTS
.
Что мне не хватает? Спасибо.