Проблема с отображением предупреждений после неудачных входов в систему

#javascript #html #django

Вопрос:

Я создаю веб-сайт в качестве своего окончательного проекта и хочу отобразить сообщение для пользователей, которым не удалось войти в систему более 3 раз, с предложением сбросить свои пароли.

Я уже пробовал различные решения, которые нашел в Интернете, но ничего не помогает.

Я пишу бэкэнд на Django, но Django-axes также не работал для меня, поэтому сейчас я пытаюсь JS.

 lt;script type="text/javascript"gt;  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;  }  } lt;/scriptgt;   

Это пример, который я нашел в разделе Переполнение стека. Я думаю, что близок к решению этой проблемы, я получаю сообщения, но при печати «login_attemps» в консоли сначала я получаю 3, а затем непрерывно 2, независимо от того, сколько раз я пишу неверный пароль.

Функция вызывается в форме. Я также пытался сделать это в body onload=»»

 lt;form id="login-form" class="form" action="login" method="post" onsubmit="checkAttempts();"gt;  

Вся аутентификация реализована в views.py джанго:

 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.

Комментарии:

1. Куда вы звоните на сервер? Если вы только отправите форму, то скрипт не сделает ничего полезного

2. @mplungjan что ты имеешь в виду под этим? сервер запускается с помощью python manage.py запустите сервер в cmd

3. onsubmit="checkAttempts();" выполняется ДО доступа к серверу, и весь сценарий будет сброшен, ЕСЛИ форма будет отправлена

4. @mplungjan как мне вызвать сервер?

Ответ №1:

Я бы ожидал чего-то вроде

 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) =gt; response.json())  .then((data) =gt; {  console.log('Success:', data); // here we are logged in  })  .catch((error) =gt; {  console.error('Error:', error);  }); });  

Комментарии:

1. Должен ли он быть добавлен независимо в мою отправку или я должен использовать его вместо своей функции? Или все проверяемое количество попыток должно быть в улове((ошибка)?

2. Вместо вашего скрипта и счетчика и alert('failed login') в функции ошибок. Счетчик должен быть возвращен из сценария, а не жестко закодирован, так как они могут просто сделать login_attempts = 10000;

3. о боже, это сработало, Большое тебе спасибо!

4. ИВ. Рад, что дал вам некоторое представление