Bcrypt将密码结果与Node.js中的未定义错误进行比较

时间:2019-02-05 14:48:11

标签: node.js express ejs

我正在使用护照设置一个简单的登录名 尝试将用户密码与保存的密码进行比较时发生错误

    protected override void OnPause() {
        base.OnPause();
        if (IsFinishing) {
            _logic?.detach();
            _logic = null;
        }
    }

当我module.exports = function (passport) { passport.use(new LocalStrategy(function (username, password, done) { let query = { email: username }; User.find(query, function (err, user) { if (err) { console.log(err); } else { if (!user) { console.log(3) return done(null, false, { message: 'No user found' }) } else { bcrypt.compare(password, user.password, function (err, isMatch) { if (err) { console.log(err); } else { console.log(user.password) if (isMatch) { console.log(5) return done(null, user); } else { console.log(6) return done(null, false, { message: 'Wrong Password' }) } } }) } } }) })); 时:

console.log(user)

但是使用bcrypt,[ { _id: 5c5995448a88110c35673bb7, firstname: 'test', lastname: 'sample', email: 'testsample@gmail.com', password: '$2b$10$bDVGjce/aDxr/NzXFw.qO.DA4tKjY6EwMARgl/NZfb0FNTaTxYwCW', __v: 0 } ] 的结果为user.password,同时尝试将保存的密码与表单的undefined条目进行比较,但是,显然已经从查询结果中收到了密码在password结果中。

1 个答案:

答案 0 :(得分:0)

由于mongoDB返回的“用户”为包含单个项目的数组,因此您可以:

module.exports = function (passport) {
passport.use(new LocalStrategy(function (username, password, done) {
    let query = { email: username };

    User.find(query, function (err, user) {

        if (err) { 
            console.log(err); 
        }
        else {
            if (!user) {
                console.log(3)
                return done(null, false, { message: 'No user found' })
            } else {
                bcrypt.compare(password, user[0].password, function (err, isMatch) {
                    if (err) {
                        console.log(err);
                    } else {
                        console.log(user[0].password)

                        if (isMatch) {
                            console.log(5)
                            return done(null, user);
                        } else {
                            console.log(6)
                            return done(null, false, { message: 'Wrong Password' })
                        }
                    }
                })
            }
        }

    })
}));

或者您可以

module.exports = function (passport) {
passport.use(new LocalStrategy(function (username, password, done) {
let query = { email: username };

User.find(query, function (err, user) {

    if (err) { 
        console.log(err); 
    }
    else {
        if (!user) {
            console.log(3)
            return done(null, false, { message: 'No user found' })
        } else {
            let userdata = user[0];
            bcrypt.compare(password, userdata.password, function (err, isMatch) {
                if (err) {
                    console.log(err);
                } else {
                    console.log(userdata.password)

                    if (isMatch) {
                        console.log(5)
                        return done(null, user);
                    } else {
                        console.log(6)
                        return done(null, false, { message: 'Wrong Password' })
                    }
                }
            })
        }
    }

})
}));