[Python] Custom Middleware blocking my Password Reset View

Discussão em 'Python' iniciado por Stack, Julho 15, 2025.

  1. Stack

    Stack Membro Participativo

    I made a Custom Middleware to secure all my views at once. I also made a custom decorator to exempt login and register/signup functions so that they're accessible to visitors. But when I tried to reset my password using the password-reset view, I couldn't as it redirected me to the login page. This system worked earlier when I had not put my Custom middleware inside the settings.py

    Middleware.py

    from django.contrib.auth.decorators import login_required

    def login_exempt(view): # <-- Custom Decorator
    view.login_exempt = True
    return view

    class LoginRequiredMiddleware: # <-- Custom Middleware
    def __init__(self, get_response):
    self.get_response = get_response

    def __call__(self, request):
    return self.get_response(request)

    def process_view(self, request, view_func, view_args, view_kwargs):
    if getattr(view_func, 'login_exempt', False):
    return

    if request.user.is_authenticated:
    return

    return login_required(view_func)(request, *view_args, **view_kwargs)


    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',

    # custom auth middleware

    'dashboard.middleware.LoginRequiredMiddleware',
    ]


    Now, if I remove my custom middleware, I'm able to visit my password-reset view. So what should I do to exclude my Auth Views using my login_exempt Custom Decorator? TIA

    UrlCONF

    from django.urls import path,include
    from django.contrib import admin
    from django.conf import settings
    from django.conf.urls.static import static

    urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include("myapp.urls")),
    path('accounts/', include('django.contrib.auth.urls'))
    ]

    if settings.DEBUG:
    urlpatterns += (static(settings.STATIC_URL, document_root=settings.STATIC_ROOT))

    Continue reading...

Compartilhe esta Página