Django Axes работает, но не хранит ни попыток доступа, ни неудач
Заранее прошу прощения, я новичок во всем этом (стек, Django и Axes).
Я создаю простой сайт, где можно создавать пользователей, и я реализовал django axes. Он работает в том смысле, что блокирует вас после неудачных попыток на основе имени пользователя и IP. Он даже регистрирует их в админ-панели в разделе Axes "Access logs". Но "Попытки доступа" и "Неудачные попытки доступа" пусты. Ниже приведен мой код users/views.py, а под ним - users/urls.py:
@axes_dispatch
def login(request):
if request.user.is_authenticated:
return redirect('home')
if request.method == 'POST':
form = UserLoginForm(request, data=request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
auth_login(request, user)
messages.success(request, f'Welcome back, {username}!')
return redirect('home') # successful login redirect
else:
# signal for failed attempt
signals.user_login_failed.send(
sender=user.__class__,
request=request,
credentials={'username': username}
)
messages.error(request, 'Invalid username or password.')
else:
# signal for invalid
signals.user_login_failed.send(
sender=None,
request=request,
credentials={'username': request.POST.get('username')}
)
messages.error(request, 'Invalid username or password.')
else:
form = UserLoginForm()
return render(request, 'users/login.html', {'form': form})
Вот пользовательский urls.py:
urlpatterns = [
path('login/', views.login, name='login'),
path('logout/', views.logout, name='logout'),
path('register/', views.register, name='register'),
path('change_profile/', views.profile, name='change_profile'),
path('change_password/', views.change_password, name='change_password'),
path('lockout/', views.lockout, name='lockout'),
]
Вот все в settings.py, что содержит Axes:
INSTALLED_APPS = [
'axes',
]
MIDDLEWARE = [
'axes.middleware.AxesMiddleware', #Axes
]
AUTHENTICATION_BACKENDS = [
#Axe has to be first
'axes.backends.AxesStandaloneBackend',
'django.contrib.auth.backends.ModelBackend',
]
AXES_FAILURE_LIMIT = 5
AXES_COOLOFF_TIME = timedelta(minutes=5)
AXES_RESET_ON_SUCCESS = True
AXES_LOCKOUT_CALLABLE = 'users.signals.custom_lockout_response'
AXES_LOCKOUT_PARAMETERS = ['username', 'ip_address']
AXES_LOCKOUT_URL = '/lockout/'