如何从Node.js中的jwt令牌获取user.id?

时间:2018-12-22 16:43:27

标签: javascript node.js jwt

在我的用户控制器中,我创建一个令牌,当该用户登录到我的应用程序时,我将在其中保存该ID。

exports.findOne = (req, res) => {
  User.findOne({
    where: {
      login: req.body.login,
    },
  })
    .then(user => {
      if (user) {
        if (bcrypt.compareSync(req.body.password, user.password)) {
          const token = jwt.sign(
            {
              id: user.id, // this is the id I need.
            },
            env.SECRET_KEY,
            {
              expiresIn: 129600,
            },
          );
          return res.status(200).json({
            message: 'Auth successful',
            token,
          });
        }
       ...
      }
    })
    .catch(err => {
      res.status(400).json({ error: err });
    });
};

现在在另一个控制器中,我想读取此ID并将其用于我的目的。我怎么去呢?

       const loginId = '?'; // here I want to give it to id
            Bill.update(
              {
                available_funds: available_funds - amountMoney,
              },
              { where: { id_owner: loginId } },
            ).then(() => {
              res.status(200).send(`ok`);
            });

1 个答案:

答案 0 :(得分:0)

制作一个中间件,该中间件在转发到更新路由之前会检查传入的令牌。 该中间件应负责验证登录后从客户端代码传递来的传入令牌(通常在cookie中存储令牌)。

现在,在中间件中,您可以执行以下操作:

app.use(function(req,res,next) {
 JWT.verify(req.cookies['token'], 'YOUR_SECRET', function(err, decodedToken) {
   if(err) { /* handle token err */ }
   else {
    req.userId = decodedToken.id;   // Add to req object
    next();
   }
 });
});

然后,最后在即将到来的控制器中,您可以从请求对象访问ID:

   const loginId = req.userId;

    Bill.update(
      {
        available_funds: available_funds - amountMoney,
      },
      { where: { id_owner: loginId } },
    ).then(() => {
      res.status(200).send(`ok`);
    });