Object.bcrypt.compareSync错误:字符串未定义。有可行的解决方案吗?

在渲染的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页面

非常感谢你们!

js333888 回答:Object.bcrypt.compareSync错误:字符串未定义。有可行的解决方案吗?

显然来自您的verified变量。检查您传递到bcrypt.compareSync的数据。此外,如果您使用的是mongoose / mongodb,请检查是否在架构的password属性中添加了select: false

,

你必须使用 findOne() 而不是 find 因为 find 将返回对象数组 [{auserObject}] 所以你的 auser.passHash 将是 undefine ,把 find 只返回你的对象 {auserObject} 和在这里您可以使用 auser.passHash

本文链接:https://www.f2er.com/3134121.html

大家都在问