Почему сравнение bcrypt всегда возвращает false

#javascript #node.js #mongodb #authentication #bcrypt

#javascript #node.js #mongodb #аутентификация #bcrypt

Вопрос:

Каждый раз, когда я пытаюсь войти в систему, сравнение bcrypt возвращает false, но регистрация работает.

Вот код для входа в систему :

 async function init(passport){
const authenticateUser = async (email,password,done) => {
const user = await User.findOne({email : email})

if(user === null) return done(null,false,{message : "Email and Password do not match"});

try{
    const isPasswordMatch = await bcrypt.compare(password,user.password);
    console.log(isPasswordMatch);
    if(isPasswordMatch) return console.log("Up and running");
    done(null,false,{message : "Password"});
}
catch(error){done(error)}
}


}

module.exports = init;
  

Обратите внимание, что я использую библиотеку passportjs и исключил для нее код, но у меня была эта проблема до того, как я ее добавил

Комментарии:

1. Если вы войдете в базу данных и запустите findOne, найдете ли вы учетные данные, и они того же типа? Кроме того, если по какой-то причине электронное письмо не уникально, возможно, вы получаете другого пользователя. Проверьте это.

2. Хорошая идея, но я только что проверил, и все было хорошо, единственная проблема заключалась в том, что когда я использовал хэшированную строку, чтобы найти пользователя, он не смог ее найти

3. хм … не могу с этим помочь, не знаю, что такое хэшированный str

Ответ №1:

Вы хэшировали пароль, когда пользователь сохранялся при регистрации? Вы можете проверить, является ли пароль открытым текстом.