在渲染的nunjucks模板上,我形成了它以接受用户键入的用户名和密码。单击“提交”按钮后,它应在我的javascript express文件中搜索数据库,以查看用户是否使用了什么输入的是在数据库中。
但是我一直收到错误消息。
我确保没有拼写错误或类似的错误,但是我不确定如何解决此错误。 这是我的错误信息:
错误:非法参数:undefined,undefined 在Object.bcrypt.compareSync
我的快递代码正在处理提交按钮。
let usersdb = new DataStore({filename: __dirname + '/usersDB', autoload: true});
app.post('/user', express.urlencoded({extended:true}), function (req, res) {
console.log(req.body);
let username = req.body.username;
let password = req.body.password;
// Find user
let auser = usersdb.find(function (user) {
return user.username === username
});
if (!auser) {// Not found
res.render("loginError.njk");
return;
}
//**** Its like the error happens on this line below*****
let verified = bcrypt.compareSync(password, auser.passHash);
if (verified) {
let oldInfo = req.session.user;
req.session.regenerate(function (err) {
if (err) {
console.log(err);
}
req.session.user = Object.assign(oldInfo, auser, {
loggedin: true
});
res.render("welcome.njk", {user: auser});
});
} else {
res.render("loginError.njk");
}
});
我的预期结果是,当用户在呈现的nunjucks页面上输入其用户名和密码(及其有效的用户名和密码(有效的含义是在usersdb中找到))时,它将呈现欢迎页面。
如果未找到,则应显示logerror.njk页面
非常感谢你们!
答案 0 :(得分:0)
显然来自您的verified
变量。检查您传递到bcrypt.compareSync
的数据。此外,如果您使用的是mongoose / mongodb,请检查是否在架构的password属性中添加了select: false
答案 1 :(得分:0)
你必须使用 findOne()
而不是 find 因为 find 将返回对象数组 [{auserObject}]
所以你的 auser.passHash
将是 undefine ,把 find 只返回你的对象 {auserObject}
和在这里您可以使用 auser.passHash