Проблема с отображением предупреждений после неудачного входа в систему
Я создаю сайт в качестве своего последнего проекта и хочу вывести сообщение для пользователей, которые не смогли войти в систему более 3 раз, предлагая им сбросить свой пароль.
Я уже пробовал различные решения, которые нашел в Интернете, но ничего не помогает.
Я пишу бэкенд на Django, но Django-axes также не работал для меня, поэтому я пробую JS сейчас.
<script type="text/javascript">
var login_attempts = 3;
function checkAttempts()
{
var failed_alert = document.querySelectorAll("a")[0].textContent;
if (failed_alert === " Invalid username or password ") {
login_attempts--;
console.log(login_attempts);
alert('failed login')
if (login_attempts==0)
{
alert("Do you want to reset your password?");
}
} else {
console.log(login_attempts);
return false;
}
}
</script>
Этот пример я нашел на Stack Overflow. Мне кажется, я близок к решению этой проблемы, я получаю сообщения, но при печати "login_attemps" в консоли сначала получаю 3, а потом постоянно 2, сколько бы раз я не писал неправильный пароль.
Функция вызывается в форме. Я также пытался сделать это в body onload="""
<form id="login-form" class="form" action="login" method="post" onsubmit="checkAttempts();">
Вся аутентификация реализована в views.py django:
def login(request):
if request.user.is_authenticated:
return redirect('/')
else:
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
return HttpResponseRedirect(request.GET.get('next', LOGIN_REDIRECT_URL))
else:
messages.info(request, 'Invalid username or password')
return redirect('login.html')
else:
return render(request, 'login.html')
Я чувствую, что теряю свои идеи. Я пытался решить эту проблему в течение 2 недель безрезультатно. Если у кого-то есть идеи, буду благодарен. Это может быть как на js, так и на django.
Я бы ожидал чего-то вроде
document.getElementById('login-form').addEventListener('submit', function(e) {
e.preventDefault();
fetch('login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
'username': this.username.value,
'password': this.password.value
})
})
.then((response) => response.json())
.then((data) => {
console.log('Success:', data); // here we are logged in
})
.catch((error) => {
console.error('Error:', error);
});
});