私はpassport-localを使用しています。私はすでにmongoデータベースにパスワードをハッシュしています。なぜ私のbcrypt.compare()が正しく動作していないのか分かりません。それは 'cbは関数ではない'と言いますが、それはそうです。私は、コールバックをUserスキーマに保存するのではなく、同じファイルに変数として保存しました。誰もが前にこの問題を横断したり、私のコード内の任意のエラーを参照してください?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だけで動作するようにはできません:/ –