I had made a Custom Middelware to secure all my views at once and 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
, i couldn't as it redirected me to login page, this system worked earlier when i had not put my Custom middelware 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
. 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))