JSON и JS повторяют проверку индексного номера (чистый JAVASCRIPT)

#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'))