Вы не правильно проверяете с возвращаемым предложением, также ваш атрибут onsubmit
был в форме регистра.
Используйте атрибут имени в формах
Это поможет вам идентифицировать ваши формыи легко вводить с помощью JavaScript, в противном случае у вас могут возникнуть проблемы с определением того, какой ввод в больших формах.
<form name="login" class="login-form">
<input name="user" type="text" placeholder="username" />
<input name="pass" type="text" placeholder="password" />
<button>login</button>
<p class="message">Not registered? <a href="#">Register</a>
</p>
</form>
Применительно к вашей форме входа в систему вы можете ссылаться на нее, выполнив document.login
.
Воспользуйтесь преимуществами по сравнению с собственными HTML-событиями в JavaScript
Способ получения имени пользователя и пароля очень сложен, так как он необходим, вы можете добавить прослушиватель событий в JavaScript и обрабатывать там все:
const loginForm = document.login;
loginForm.addEventListener("submit", validate);
Это будет вызывать validate
каждый раз при отправке формы. Кроме того, он отправляет событие в качестве параметра, поэтому вы можете получить его в своей функции следующим образом:
function validate(event) {
event.preventDefault(); // Stop form redirection
let user = event.target.user.value,
pass = event.target.pass.value;
// REST OF THE CODE ...
}
Это проще, поскольку мы добавили атрибуты имени к входам, поэтому мы можем идентифицировать их по user
и pass
.
Проверка
ПРИМЕЧАНИЕ: Я не рекомендую проверять данные username: password непосредственно в браузере, поскольку этобольшая уязвимость и должен быть проверен на стороне сервера.
Вы можете упростить эту проверку, связав имя пользователя с его паролем в объекте, вместо создания двух массивов. :
const accounts = {
"adrian@tissue.com": "welcome1",
"dduzen1@live.spcollege.edu": "w3lc0m3",
"deannaduzen@gmail.com": "ch1c@g0"
};
И затем, сохранив значение входных данных в переменных user
и pass
, вы можете сделать:
if (accounts[user] == pass) {
//SUCCESSFUL LOGIN
console.log('Correct. Logged in!');
} else {
//WRONG LOGIN CREDENTIALS
attempts--;
validateAttempts();
}
С целью не иметь многокода в поле зрения, вы должны создать другую функцию, единственной задачей которой является проверка, если вы должны заблокировать пользователя или нет.
Результат
Я должен упомянуть, что это будет работать толькочтобы подтвердить форму пользователя, если вам нужно сохранитьсеанс и держать пользователя в системе, вы должны использовать язык на стороне сервера.
Я оставляю вам фрагмент со всеми этими работающими изменениями, убедитесь сами:
const accounts = {
"adrian@tissue.com": "welcome1",
"dduzen1@live.spcollege.edu": "w3lc0m3",
"deannaduzen@gmail.com": "ch1c@g0"
};
const loginForm = document.login;
let attempts = 3;
loginForm.addEventListener("submit", validate);
function validate(event) {
event.preventDefault();
let user = event.target.user.value,
pass = event.target.pass.value;
if (accounts[user] == pass) {
//SUCCESSFUL LOGIN
console.log('Correct. Logged in!');
} else {
console.log('Wrong username or password.');
attempts--;
validateAttempts()
}
}
function validateAttempts() {
if (attempts <= 0) {
console.log("You are now blocked");
loginForm.user.value = "You are now blocked";
loginForm.pass.value = "You are now blocked";
loginForm.user.disabled = true;
loginForm.pass.disabled = true;
}
}
<form name="login" class="login-form">
<input name="user" type="text" placeholder="username" />
<input name="pass" type="text" placeholder="password" />
<button>login</button>
<p class="message">Not registered? <a href="#">Register</a>
</p>
</form>