Primera pregunta sobre Stackoverflow, aún nuevo en programación.
Estoy tratando de hacer una página de inicio de sesión bancaria simple con un archivo JSON que tiene todos los nombres de usuario y contraseñas.
Estoy haciendo una declaración if que leerá el archivo JSON para encontrar el nombre de usuario y la contraseña como clave y valor para que coincida con la entrada del usuario en el sitio web. Si coincide con la entrada, iniciará sesión en el sitio web; de lo contrario, dirá "Contraseña no válida" o "No es un nombre de usuario registrado".
Lo que sucede es que me sigue dando "No es un correo electrónico registrado" cuando escribí el nombre de usuario y la contraseña correctos, pero quiero iniciar sesión con el nombre de usuario y la contraseña correctos.
Estoy usando node.js y express (¿no estoy seguro de si es importante?). Lo siento si mi código o explicación no está claro, todavía es muy nuevo.
... var accounts = JSON.parse(fs.readFileSync('./accounts.json')); app.post('/', function (req, res) { username1 = req.body.userinput; //username is their email password1 = req.body.passinput; if (username1 == accounts.email && password1 == accounts.password) { console.log("Correct login"); res.render('login', { layout: false}); } else if (username1 == accounts.email && password1 != accounts.password) { var incorrectp = ("Invalid Password"); res.render('login', { layout: false, wrongp: incorrectp }); } else if (username1 != accounts.email) { var incorrectu = ("Not a registered username"); res.render('login', { layout: false, wrongu: incorrectu }); } });cuentas.json
[ { "id": "100001", "email":"helloworld@gmail.com", "password":"helloworld", "accountType":"Chequing", "accountBalance":0 }, { "id": "100002", "email":"john@beatles.uk", "password":"lennon", "accountType":"Savings", "accountBalance":0 } ] ...Este enfoque no escalará muy bien. Puedes hacer esto usando forEach:
let accountName; accounts.forEach(obj => { if (obj.email === username1 && obj.password === password1) { accountName = obj.email })o usando buscar:
const accountName = accounts.find(obj => (obj.email === username1 && obj.password === password1))Además de la pregunta real, quiero enfatizar que nunca debe almacenar la contraseña en forma clara o encriptada. Se debe utilizar un mecanismo de hashing de contraseñas, los posibles candidatos incluyen: Argon2, bcrypt o PBKDF2. Asegúrese de utilizar los parámetros adecuados para estos mecanismos.
Le gustaría iterar a través de accounts.json.
Prueba algo como esto.
let acc; for (const account of accounts) { if (username1 == account.email) { acc = account; } } if (acc == null) { var incorrectu = ("Not a registered username"); res.render('login', { layout: false, wrongu: incorrectu }); return; } // Do your account checking logic here