我在登录过程中使用了pbkdf2-password模块,其中一些代码在运行时似乎卡住了。我使用了异步哈希函数来验证用户,并且当用户输入错误的密码时会发生问题。只是加载不会停止。
我尝试重定向并在用户输入错误的passwd并返回时返回。 但我想知道为什么休息不起作用。
app.post('/login', (req, res) => {
console.log(req.body);
let userid = req.body.id;
let password = req.body.password;
console.log('userid = ', userid);
console.log('password = ', password);
console.log('userlist = ', sampleUserList);
let bFound = false;
for (let i = 0; i < sampleUserList.length; i++) {
let user = sampleUserList[i];
console.log(sampleUserList[i]);
if (userid === user.userid) {
console.log('[found] userid = ', userid);
bFound = true;
/* here's where I verify users. */
return hasher({
password: password,
salt: user.salt
}, function(err, pass, salt, hash) {
if (err) {
console.log('ERR : ', err);
}
if (hash === user.password) {
console.log('INFO : ', userid, ' logged in successfully')
req.session.user = sampleUserList[i];
req.session.save(function() {
res.redirect('/carlist');
})
return;
/* here's the code for when users input wrong passwd but still have ID */
} else {
console.log('Wrong passwd.');
}
});
}
if (bFound) break;
}
if (!bFound) {
console.log('Theres no such ID.');
}
res.redirect('/login_form');
});
else {
console.log('Wrong passwd.');
res.redirect('/login_form');
return;
}
此代码解决了问题,但是我想知道为什么中断不起作用。
no error msg but infinite loading.
答案 0 :(得分:2)
将永远无法到达break
。 if语句中的return
将阻止所有后续代码执行。
它也打破了循环,因此您可以随意删除break
,因为您的函数已经完成了break
想要的工作。
app.post('/login', (req, res) => {
let userid = req.body.id;
let password = req.body.password;
let bFound = false;
for (let i = 0; i < sampleUserList.length; i++) {
let user = sampleUserList[i];
if (userid === user.userid) {
bFound = true;
return hasher(/* args */); // <-- this ends execution of the login handler
}
if (bFound) break;
}
if (!bFound) {
console.log('Theres no such ID.');
}
res.redirect('/login_form');
});