#javascript #json #database
#язык JavaScript #json #База данных
Вопрос:
Я создаю сайт для входа в систему через JSON и хочу проверить, совпадает ли имя пользователя с паролем (с помощью индексов массива для сопоставления имени пользователя, пароля и электронной почты), но я не могу понять, как узнать, совпадает ли имя пользователя с каким-либо номером индекса и есть ли индекс в массиве, соответствующий ему в разделе пароли. Я могу использовать indexOf с рекурсией (вызывающая себя функция), но мне нужно увеличить индекс, проверенный на 1, что я не знаю, как это сделать. (искал что-нибудь, но ничего не могу найти) вот так:
{ "usernames": [ "Supa", "Marwan", "Jason", "Jacob", ] "passwords": [ "placeholder", "placeholder1", "placeholder2", "placeholder3", ] }
function checkDetails(username, password) { let message = document.getElementById("placeholder"); let password = document.getElementById("placeholder1"); let username = document.getElementById("placeholder2"); //part I am struggling with let usernames = json.parse("usernames"); let passwords = json.parse("passwords"); message.innerHTML = (username === usernames[/*i want this to increment to check*/]) ? message.innerHTML = (password === indexOf(/*I want this to be the index of the one index that IS true to the conditional above*/)) ? m essage.innerHTML = "Success with logging in" : message.innerHTML = "Invalid username or password";
Комментарии:
1. В вашем примере отсутствует закрывающая скобка
checkDetails
, а в середине имени переменной (message
) есть разрыв строки…2. Я предполагаю, что это игрушечный проект, потому что такой подход к аутентификации совершенно небезопасен. Здесь нет необходимости в рекурсии.
json.parse
это не функция, так и должно бытьJSON.parse
. Вы ищетеindexOf
, напримерusernames.indexOf(username) gt;= 0
?3. Игнорируя другие проблемы с вашим кодом, похоже, что вы хотите использовать длинное и нечитаемое троичное выражение здесь по какой-либо причине, и поэтому вы ищете подходящий тест. Что просто
data.usernames.indexOf(username) == data.passwords.indexOf(password)
(хотя вам также нужно будет проверить, является ли один из них gt; -1)4. поскольку имена пользователей и пароли хранятся в массивах, а пароли и имена пользователей для всех находятся в одном индексе, я хочу, чтобы он проверил текст каждого отдельного имени пользователя в массиве, а затем нашел номер индекса правильного и проверил, совпадают ли пароли (используя ваш пример, я не могу проверить текст индекса, чтобы убедиться, что он правильный, и они ввели его во вход.
Ответ №1:
Как свидетельствуют комментарии, ваш JSON был неправильно сформирован, и это совершенно небезопасный способ управления входом в систему. Тем не менее, вот как вы можете проверить имя пользователя, и если оно существует, проверьте, соответствует ли соответствующий пароль. В первой строке функции мы нормализуем имя пользователя, чтобы оно было в нижнем регистре с удалением любого дополнительного пространства.
let json = { "usernames": [ "Supa", "Marwan", "Jason", "Jacob", ], "passwords": [ "placeholder", "placeholder1", "placeholder2", "placeholder3", ] } function checkDetails(username, password) { let userindex = json.usernames.findIndex(u =gt; u.toLowerCase().trim() === username.toLowerCase().trim()); if (userindex === -1) { return 'username does not exist'; } else if (json.passwords[userindex] !== password) { return 'wrong password'; } return 'success!' } console.log(checkDetails('Supa1', 'placeholder1')) console.log(checkDetails('Supa', 'placeholder1')) console.log(checkDetails('Supa', 'placeholder'))