Я использую паспорт-локальный, и я уже hashed мои пароли в моей базе данных монго. Я не могу понять, почему мой bcrypt.compare() работает неправильно. В нем говорится: «cb не является функцией», но это так. Я просто сохранил обратный вызов как переменную в том же файле, а не сохранил ее в моей схеме пользователя. Кто-нибудь сталкивался с этой проблемой раньше или видел какие-либо ошибки в моем коде?bcrypt.compare cb не является функцией ошибки
passport.use(new LocalStrategy((username, password, done) => {
User.findOne({ username: username }).exec().then((user, err) => {
if (err) return done(err)
if (!user) return done(null, false, { message: 'Incorrect username.' })
const comparePassword = function (candidatePassword, hashedPassword, cb) {
bcrypt.compare(candidatePassword, hashedPassword, function (err, isMatch) {
if (err) return cb(err)
return cb(null, isMatch)
})
}
comparePassword(password, user.password, function (err, isMatch) {
if (err) return done(err)
if (!isMatch) return done(null, false, { message: 'Incorrect password.' })
return done(null, user)
})
})
}))
Почему вы используете эту отдельную функцию comparePassword вообще (вместо прямого вызова 'bcrypt.compare')? – Bergi
Это не связано, но для целей безопасности вы обычно не должны различать неправильное имя пользователя и неверный пароль. Просто верните одно и то же общее сообщение, таким образом злоумышленник не будет знать, нашли ли они правильное имя пользователя или нет. Это все мои 2 цента. – mscdex
Я не могу заставить его работать только с bcrypt.compare:/ –