Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Скрипт для проверки логина и пароля (https://javascript.ru/forum/misc/75139-skript-dlya-proverki-logina-i-parolya.html)

AndriiS 05.09.2018 15:42

Скрипт для проверки логина и пароля
 
Добрый день, уважаемые коллеги!

Прошу Вас помочь начинающему. Изучаю самостоятельно JS. Попалась такая задача, простая для знающего человека, над которой я давно уже бьюсь.

Есть массив logins с логинами пользователей. Нужно написать скрипт добавления логина в массив logins.

Добавляемый логин должен:
- проходить проверку на длину от 4 до 16-ти символов включительно
- быть уникален, то есть отсутствовать в массиве logins

Вот мой скрипт. Но идут ошибки. Что-то где-то не то:

"use strict";

const logins = ["Mango", "robotGoogles", "Poly", "Aj4x1sBozz", "qwerty123"]; //массив по-условию
let login = prompt("Введите новый логин", ""); //запрос на ввод нового логина

//проверка на количество символов
const isLoginValid = function (login) {
if (login.length < 4 || login.length > 16) {
alert('Ошибка! Логин должен быть от 4 до 16 символов');

return false;
}
return true;
};

//проверка на совпадения
const isLoginUnique = function (login, allLogins) {
if (allLogins.includes(login)) {
alert('Такой логин уже используется!');
return false;
}
return true;
};

// добавление логина в массив
const addLogin = function (login) {
if (isLoginValid(true) && isLoginUnique(true)) {
alert('Логин успешно добавлен!');
logins.push(login);
}
};

//вызов функций
isLoginValid(login);
isLoginUnique(login, logins);
addLogin(login);


Алерты ниже, я хочу использовать в последней функции addLogin, которая получит на вход результаты первых двух.

//(isLoginValid(true) || isLoginUnique(true)) // alert('Логин успешно добавлен!');
//(isLoginValid(true) || isLoginUnique(false)) // alert('Такой логин уже используется!');
//(isLoginValid(false) || isLoginUnique(true)) // alert('Ошибка! Логин должен быть от 4 до 16 символов');

Dilettante_Pro 05.09.2018 16:05

<script>
"use strict";

const logins = ["Mango", "robotGoogles", "Poly", "Aj4x1sBozz", "qwerty123"]; //массив по-условию
let login = prompt("Введите новый логин", ""); //запрос на ввод нового логина

//проверка на количество символов
const isLoginValid = function (login) {
if (login.length < 4 || login.length > 16) {
alert('Ошибка! Логин должен быть от 4 до 16 символов');

return false;
}
return true;
};

//проверка на совпадения
const isLoginUnique = function (login, allLogins) {
if (allLogins.includes(login)) {
alert('Такой логин уже используется!');
return false;
}
return true;
};

// добавление логина в массив
const addLogin = function (login) {
if (isLoginValid(login) && isLoginUnique(login, logins)) {
alert('Логин успешно добавлен!');
logins.push(login);
}
};

//вызов функций

addLogin(login);
</script>

laimas 05.09.2018 16:11

AndriiS, а наряду с логинами еще и массив паролей в задаче?

AndriiS 05.09.2018 16:31

Цитата:

Сообщение от laimas (Сообщение 494047)
AndriiS, а наряду с логинами еще и массив паролей в задаче?

Да, это в условии исходный массив. Для того, чтобы проверять функцию которая сравнивает на совпадения. Потом в него добавлять новые.

AndriiS 05.09.2018 16:42

Dilettante_Pro,
Вам большое спасибо! Теперь искать свои ошибки будет веселей. :-)

laimas 05.09.2018 16:45

Цитата:

Сообщение от AndriiS
Да, это в условии исходный массив.

Пароли никогда и не под каким предлогом не проверяются на клиенте, ибо это не просто дыра в безопасности будет, а целый портал. Да и логины, коих на сайте может быть множество, вываливать на клиента нет никакого смысла. Такие проверки делаются на сервере, клиент только запрашивает его используя для облегчения жизни пользователю асинхронный запрос.

Смысла в задачах, которые не имеют практического применения никакого нет.

AndriiS 06.09.2018 00:41

Всем доброй ночи!

Я дал неверное название темы. Нужно просто Скрипт для проверки логина. Без пароля. Погорячился и теперь как честный человек должен сюда привести скрипт по проверке пароля. :-)

По теме, я хотел уточнить вот что: изначально я хотел реализовать другой алгоритм проверки логина. Менее оптимальный, чем привел Dilettante_Pro, но теперь для тренировки хочу сам его сделать. Идея была в том, что первая и вторая функции проверяющие длину и наличие того, что ввел юзер возвращают в результате true или false. Потом, есть третья функция, которая принимает в себя одну из комбинаций (true/true, false/true, false/false, true/false) от двух первых и в зависимости от того, что подходит, потом она выдает return и соответствующий alert. Это я попробую через if else.

Главный мой вопрос, - как передать на вход третьей функции булевы значения? Как взять були из первых двух и отдать их третьей функции для обработки? Передать ей их в виде аргументов как-то? Я запутался.

Заранее благодарен за помощь.

laimas 06.09.2018 05:20

AndriiS, единственная возможная и нужная проверка логина на клиенте, это его длина мин/макс, разрешенные символы, если есть. Это все, ни какой проверки уникальности не должно быть, хотя бы уже потому, что пока пользователь А чесал репу и выбрал не занятый "abc", пользователь В в это время занял его.

Занятость логина проверяется запросом на сервер по запросу пользователя или же автоматически при смене фокуса заполненного поля. Она также проверяется при отправлении формы, и даже после этого прежде чем добавить в базу, сервер проверяет занятость, не допуская записи не уникальных значений.

Решайте задачи, которые действительно вам предстоит решать на практике.

Dilettante_Pro 06.09.2018 10:56

Цитата:

Сообщение от AndriiS
Идея была в том, что первая и вторая функции проверяющие длину и наличие того, что ввел юзер возвращают в результате true или false. Потом, есть третья функция, которая принимает в себя одну из комбинаций (true/true, false/true, false/false, true/false) от двух первых и в зависимости от того, что подходит, потом она выдает return и соответствующий alert.

Именно так и работает пример в пост 2.
Запуск функций isLoginValid(login) и isLoginUnique(login, logins) в функции addLogin возвращает в нее результаты выполнения этих функций

Если очень хочется запускать их не в функции addLogin, а передавать в нее их результаты, то можно так:
<script>
"use strict";

const logins = ["Mango", "robotGoogles", "Poly", "Aj4x1sBozz", "qwerty123"]; //массив по-условию
let login = prompt("Введите новый логин", ""); //запрос на ввод нового логина

//проверка на количество символов
const isLoginValid = function (login) {
if (login.length < 4 || login.length > 16) {
alert('Ошибка! Логин должен быть от 4 до 16 символов');

return false;
}
return true;
};

//проверка на совпадения
const isLoginUnique = function (login, allLogins) {
if (allLogins.includes(login)) {
alert('Такой логин уже используется!');
return false;
}
return true;
};

// добавление логина в массив
const addLogin = function (login, parValid, parUniq) {
if (parValid && parUniq) {
alert('Логин успешно добавлен!');
logins.push(login);
}
};

//вызов функций

addLogin(login, isLoginValid(login), isLoginUnique(login, logins));
</script>


Часовой пояс GMT +3, время: 12:44.