аутентификация с использованием JWT в NodeJS - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь построить аутентификацию, используя nodejs с jwt, и я успешно завершаю процесс регистрации, чтобы зарегистрировать новых пользователей в базе данных mongo, но у меня проблема с входом в систему, и это код входа в систему:

// Login
router.post('/log', (req, res) => {
  User.findOne({ email: req.body.email }, { password: req.body.pass })
    .exec()
    .then(function(user) {
      bcrypt.compare(req.body.pass, user.pass, (err, result) => {        
        if (err) {
          return res.status(401).send('error');
        }
        if (result) {
          const token = jwt.sign({
            email: user.email,
            _id: user._id
          },
            'secret',
            {
              expiresIn: '1h'
            });
          return res.status(200).json({
            success: 'jwt',
            token: token
          });
        }
        return res.status(401).send('error happen');
      });
    })
    .catch(err => {
      res.status(401).send(err);
    });
});

когда я набираю в почтальоне / журнале и в типе тела, это структурируется:

{
    "email": "bb@bbbb.bbb",
    "password": "12345",
}

Я получаю это сообщение как ответ в почтальоне:

происходит ошибка

Я не могу понять, что за ошибка с кодом, в то время как регистр работал хорошо?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Ваша ошибка не в JWT, проблема в том, что bcrypt.compare() вернул ложь, поэтому ваш метод не вводит if и не передает возврат с вашим сообщением об ошибке.

На основе вашего кодаЯ могу предложить следующее:

  • Вы должны быть уверены, что храните свой хэш-пароль в базе данных или процесс, который вы выполняете, подходит, но пароль, который вы вводите, неверен.

  • В вашем методе поиска вы используете простой текстовый пароль в качестве параметра для поиска пользователя, в этом случае пароль не должен храниться небезопасным способом, поэтому хэш пароляТаким образом, вы должны удалить этот параметр поиска и найти пользователя для сравнения паролей.

    User.findOne({ email: req.body.email })

0 голосов
/ 14 декабря 2018

Когда вы вызываете функцию User.findone, она пытается найти пользователя с указанным адресом электронной почты и непокрытым паролем.

Измените эту строку

User.findOne({ email: req.body.email }, { password: req.body.pass })

с этим:

User.findOne({ email: req.body.email })

Таким образом, вы сможете получитьПользователь и может сравнить хешированные пароли

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...