как разрешить ошибку данных и хэша в узле js bcrypt - PullRequest
0 голосов
/ 08 октября 2018

Ошибка: требуются аргументы данных и хеша

Я делаю простой вход в систему и забыл пароль в узле js, используя bcrypt хэш

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

app.post('/login', (req, res) => {
  console.log('login');
  let {email, password} = req.body;
    User.updateOne({email: email}, ' email password', (err, userData) => {
        if (!err) {
            let passwordCheck = bcrypt.compareSync(password, userData.password);
            if (passwordCheck) { 
            console.log('login2');
                req.session.user = {
                  email: userData.email,
                  id: userData._id
                }; 
                req.session.user.expires = new Date(Date.now() + 3 * 24 * 3600 * 1000);
                res.status(200).send('You are logged in, Welcome!');
            } else {
              res.status(401).send('incorrect password');
              console.log('login3');
            }
        } else {
          res.status(401).send('invalid login credentials');
          console.log('login4');
        }
    });
});

код для регистрации:

app.post('/signup', (req, res) => {
  let {email, password} = req.body; 

    let userData = {password: bcrypt.hashSync(password, 5, null), email };
    console.log('out save');

    let newUser = new User(userData);

     newUser.save().then(error => {
        if (!error) {
        console.log('in save');
            return res.status(200).json('signup successful');
        } else { 
            if (error.code ===  11000) { 
                return res.status(409).send('user already exist!');
            } else {
                console.log(JSON.stringigy(error, null, 2)); 
                return res.status(500).send('error signing up user');
            }
        }
    });
});

Я попытался записать в консоли несколько строк и оказалось, что код не входит в регистрацию

newUser.save();

подскажитегде я иду не так

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

bcrypt.compareSync принимает 2 параметра;passwordToCheck, passwordHash

Вы получаете сообщение об ошибке «Ошибка bcrypt: требуются аргументы данных и хеша» *

Эта ошибка означает, что один или оба параметра либо нулевые, либо неопределенные, в вашем случае вам необходимо убедиться, чточто пароль userData.password правильно собирается в функции bcrypt.compareSync

0 голосов
/ 08 октября 2018

Проблема с этой строкой newUser.save().then(error => {.Вы замечаете .then().Это решенное обещание, поэтому оно не будет возвращать ошибку.Обычно вы видите что-то вроде этого.

Promise()
  .then((result) => {
    // result is a resolved promise
  })
  .catch((error) => {
    // error is a rejected promise
  })

Так что вы должны попробовать изменить свой код на это:

newUser.save()
  .then(result => {
    console.log('in save')
    return res.status(200).json('signup successful')
  })
  .catch(error => {
    if (error.code === 11000) { 
      return res.status(409).send('user already exist!')
    } else {
      console.log(JSON.stringigy(error, null, 2))
      return res.status(500).send('error signing up user')
    }
  })

Похоже, вы используете mongoose, вот API-документыдля Document.prototype.save() https://mongoosejs.com/docs/api.html#document_Document-save

В их документации по большей части используются функции обратного вызова, но если вы прокрутите до конца .save() документацию, вы увидите, что они показывают один пример с обещанием.

...