JWT-检索令牌

时间:2018-12-24 03:36:11

标签: mongodb jwt

我试图弄清楚如何使用JWT为现有用户获取令牌ID或新令牌。目标是获取电子邮件和密码,在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 :(得分:1)

您可以尝试使用user._id.toString()user.id代替user._id来检索用户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存储库,该存储库已在Node JS中实现了JWT令牌。 https://github.com/kumaranshu72/JWT-nodeJS

您还可以按照以下教程来了解如何实现JWT身份验证:https://scotch.io/tutorials/authenticate-a-node-es6-api-with-json-web-tokens

答案 1 :(得分:0)

我认为您无需_即可访问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 });
});  

user.id而不是user._id