關于 Stackoverflow 的第一個問題,對編程來說還是個新手。
我正在嘗試使用包含所有用戶名和密碼的 JSON 檔案制作一個簡單的銀行登錄頁面。
我正在做一個 if 陳述句,它將讀取 JSON 檔案以查找用戶名和密碼作為鍵和值,以匹配用戶在網站上的輸入。如果匹配輸入,它將登錄網站,否則,它將顯示“無效密碼”或“未注冊的用戶名”。
發生的情況是,當我輸入正確的用戶名和密碼但我想使用正確的用戶名和密碼登錄時,它一直給我“不是注冊的電子郵件”。
我正在使用 node.js 和 express(不確定是否重要?)。對不起,如果我的代碼或解釋不清楚,仍然很新。
...
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 });
}
});
帳戶.json
[
{
"id": "100001",
"email":"[email protected]",
"password":"helloworld",
"accountType":"Chequing",
"accountBalance":0
},
{
"id": "100002",
"email":"[email protected]",
"password":"lennon",
"accountType":"Savings",
"accountBalance":0
}
]
...
uj5u.com熱心網友回復:
你會想要遍歷accounts.json。
嘗試這樣的事情。
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
uj5u.com熱心網友回復:
這種方法不會很好地擴展。您可以使用 forEach 執行此操作:
let accountName;
accounts.forEach(obj => {
if (obj.email === username1 && obj.password === password1) {
accountName = obj.email
})
或使用查找:
const accountName = accounts.find(obj => (obj.email === username1 && obj.password === password1))
除了實際問題之外,我想強調的是,您永遠不應該以明文或加密形式存盤密碼。必須使用密碼散列機制,可能的候選者包括:Argon2、bcrypt 或 PBKDF2。確保為這些機制使用適當的引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/421454.html
標籤:
上一篇:如何防止用戶在Javascript中的陣列中添加重復值
下一篇:客戶端被服務器配置拒絕:
