Python 重定向到带有中间件的登录页面导致';“重定向太多”;问题
我想要的是,如果用户未经身份验证,则将其重定向到登录页面。我制作了一个中间件,但重定向不起作用。谁能帮我一个忙吗 我的网址:Python 重定向到带有中间件的登录页面导致';“重定向太多”;问题,python,django,redirect,Python,Django,Redirect,我想要的是,如果用户未经身份验证,则将其重定向到登录页面。我制作了一个中间件,但重定向不起作用。谁能帮我一个忙吗 我的网址: from django.contrib import admin from django.urls import path, include from django.conf import settings from django.conf.urls.static import static urlpatterns = [ path('admin/', admi
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('contas/', include('django.contrib.auth.urls'), name='login'), # I want call this
path('', include('apps.props.urls'))
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
我的中间件.py
from django.http import HttpResponseRedirect
from django.urls import reverse
class AuthRequiredMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if not request.user.is_authenticated:
return HttpResponseRedirect(reverse('login')) # Here I call login
response = self.get_response(request)
return response
最后是my settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'middleware.AuthRequiredMiddleware', # Registering middleware
]
我得到的是这个页面“重定向太多”
我的日志:
对@Melvyn和@Onsem的评论,我已经改进了我的代码。这里有一个解决方案(我们只需要小心处理介质文件夹中的文件,它们是以匿名用户身份访问的):
想一想。1, 2, 3. 不好的,您将未经身份验证的人发送到登录页面。当他到达那里时,他没有经过身份验证,因此您将他发送到登录页面。当他到达那里时,他没有被授权,所以你把他发送到登录页面。当他到达那里时,他没有被授权,所以你把他发送到登录页面。当他到达那里时,他没有被授权,所以你把他发送到登录页面。当他到达那里时,他没有被授权,所以你把他发送到登录页面。当他到达那里时,他还没有被认出,所以你把他送到长滩去!我会想出一个解决方案。你的中间件也会应用到登录视图本身,所以它永远不会“到达”登录视图,因为即使登录也会继续重定向到登录。
from django.http import HttpResponseRedirect
from django.urls import reverse
class AuthRequiredMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
# Here I call login if not authenticated and request is not login page
if not request.user.is_authenticated and request.path != reverse('login'):
return HttpResponseRedirect(reverse('login'))
response = self.get_response(request)
return response