JWT - Получение токена - PullRequest
       3

JWT - Получение токена

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

Я пытаюсь выяснить, как получить идентификатор токена или новый токен для существующего пользователя, использующего JWT.Цель состоит в том, чтобы взять электронную почту и пароль, найти их в БД mongo, а затем отправить обратно клиенту токен, а затем сохранить токен для сеанса.

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

Исходя из того, что я изучал, фактический токен не сохраняется в mongoDB, но токен генерируется из _id, который я по какой-то причине не могу вытащить, чтобы уйти в отставку и получить токен обратно, но нетудачи.Любой совет очень ценится для личного проекта.

    User.create({
  name : req.body.name,
  email : req.body.email,
  password : req.body.password,
},
function (err, user) {
  if (err) return res.status(500).send("There was a problem registering the user.")
  // create a token
  var token = jwt.sign({ id: user._id }, config.secret);
  res.status(200).send({ auth: true, token: token });
});    

Ответы [ 2 ]

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

Я думаю, вы можете получить доступ к идентификатору без _

    User.create({
  name : req.body.name,
  email : req.body.email,
  password : req.body.password,
},
function (err, user) {
  if (err) return res.status(500).send("There was a problem registering the user.")
  // create a token
  var token = jwt.sign({ id: user.id }, config.secret);
  res.status(200).send({ auth: true, token: token });
});  

user.id вместо user._id

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

Вы можете попробовать user._id.toString() или user.id вместо user._id для получения идентификатора пользователя.

Из приведенного ниже кода вы можете получить некоторое представление о том, как использовать токен JWT для проверки.

 login: (req, res) => {
    const { name, password } = req.body;

    mongoose.connect(connUri, { useNewUrlParser: true }, (err) => {
      let result = {};
      let status = 200;
      if(!err) {
        User.findOne({name}, (err, user) => {
          if (!err && user) {
            // We could compare passwords in our model instead of below as well
            bcrypt.compare(password, user.password).then(match => {
              if (match) {
                status = 200;
                // Create a token
                const payload = { user: user.name };
                const options = { expiresIn: '2d', issuer: 'anshukumar.me' };
                const secret = process.env.JWT_SECRET;
                const token = jwt.sign(payload, secret, options);

                // console.log('TOKEN', token);
                result.token = token;
                result.status = status;
                result.result = user;
              } else {
                status = 401;
                result.status = status;
                result.error = `Authentication error`;
              }
              res.status(status).send(result);
            }).catch(err => {
              status = 500;
              result.status = status;
              result.error = err;
              res.status(status).send(result);
            });
          } else {
            status = 404;
            result.status = status;
            result.error = err;
            res.status(status).send(result);
          }
        });
      } else {
        status = 500;
        result.status = status;
        result.error = err;
        res.status(status).send(result);
      }
    });
  }

Вы также можете проверить это репозиторий GitHub, в котором реализован токен JWT в Node JS.https://github.com/kumaranshu72/JWT-nodeJS

Вы также можете следовать следующему руководству, чтобы получить хорошее представление о том, как реализовать аутентификацию JWT: https://scotch.io/tutorials/authenticate-a-node-es6-api-with-json-web-tokens

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