Я сравниваю один и тот же plainTextPassword и хэш в двух разных программах прямо сейчас, используя bcrypt, и одна говорит мне, что пароли совпадают, а другая говорит, что они не совпадают.
В файле проблемы:
passport.use(new LocalStrategy(function(username,plainTextPassword,done) {
process.nextTick(() => {
db.query('SELECT * FROM users WHERE username = ?',[username],(err,rows) => {
if (err) return done(err);
if (!rows[0]) return done(null,false);
let hash = rows[0].password;
let user = rows[0];
bcrypt.compare(plainTextPassword, hash, (err, res) => {
console.log(plainTextPassword); // test
console.log(hash); // $2b$10$EefqCwYTMHDDtIGH.SIHIu.BPCOiT7Bp4Zzej5iUoxlKtMZ67oHtC
console.log(res); // false
if (!res) return done(null,false);
return done(null,rows[0]);
});
});
});
}));
Я копирую зарегистрированные значения plainTextPassword и хэша и вставляю их в этот код:
const bcrypt = require('bcrypt');
const saltRounds = 10;
bcrypt.compare('test', '$2b$10$EefqCwYTMHDDtIGH.SIHIu.BPCOiT7Bp4Zzej5iUoxlKtMZ67oHtC', (err,same) => {
console.log(same); // true
}
, и это возвращает true, а не false, как console.log(res)
первого блока кода возвращается.Первый блок кода хорошо проверял большинство паролей, но этот кажется другим.Никаких специальных символов нет, plainTextPassword имеет значение «test», а хэш хранится в VARCHAR (150) в базе данных mysql.