簡體   English   中英

使用中間件重定向到登錄頁面會導致“重定向過多”問題

[英]Redirect to login page with middleware is causing 'too many redirects" issue

我想要的是將用戶重定向到登錄頁面,如果他們沒有經過身份驗證。 我做了一個中間件,但重定向不起作用。 有人可以幫我嗎?

我的網址:

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

最后,我的 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 評論我已經改進了我的代碼。 這是一種解決方案(我們只需要小心媒體文件夾中的文件,它們是作為匿名用戶訪問的):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM