Я создал Custom Middelware , чтобы защитить все мои виды сразу, и сделал собственный декоратор, чтобы исключить функции login
и register/signup
, чтобы они были доступны для посетителей. Но когда я попытался сбросить пароль с помощью password-reset
, я не смог, так как он перенаправил меня на страницу входа, эта система работала раньше, когда я не поместил Custom middelware в 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',
] * * тысячу двадцать-один
Теперь, если я удалю свое промежуточное ПО, я смогу посетить мой password-reset
. Так что я должен сделать, чтобы исключить мои Auth Views , используя мой Login_exempt
Custom Decorator. ТИА
привязки
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))