Search code examples
javascriptmysqlexpresssequelize.jsexpress-session

Bcrypt.compareSync always returning false


Hi so I'm trying to create my first login with sequelize and I'm struggling with hashing and comparing hashes and it always returns false. I figured I am doing something wrong on the hashes or comparing since I'm learning. I'm using SQL database

Here's my login code, I'm using express session and sequelize:

     'processLogin': (req, res) => { 
            db.User.findOne({
            where: { 
              email: req.body.email
            }
          })
          .then(async user => {
            var eSession = req.session.userLogin
            let checkPass = await bcrypt.compare(req.body.password, user.password)
            console.log(checkPass);
            if(checkPass){
              eSession = user;
              res.send("Success");
            }else{
              res.render('login', {errors: [{
                msg: "Incorrect password"
              }]});
            }
             if(user == undefined){
              res.render('login', {errors: [{
                msg: "User not found, please Register"
              }]});}
          })
        }

And here is where I actually hashed the passwords on my register:

      'save': async (req, res) => {
        var a = [req.body.fullname, req.body.email, req.body.number, bcrypt.hashSync(req.body.password, 10), bcrypt.hashSync(req.body.repassword, 10)];
        let errors = validationResult(req);
        if(errors.isEmpty()){
        db.User.create({
          full_name: a[0],
          email: a[1],
          phone_number: a[2],
          password: await bcrypt.hash(a[3], 10),
          confirm_password: await bcrypt.hash(a[4], 10)
        })
        .then(users => {
          res.send("succes!!");
        }) 
        }else{
          res.render('register', { errors: errors.errors })
        }
      }
    }

Solution

  • insted of sync why don't you try async and wait unitll it get's hashed or decrypt.

    inside async function to hash password.

    let hashedPassword = await hash(password, 10);
    

    and inside async function for comparing password

        let checkPass = await compare(password, foundUser.password);