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

Posted

技术标签:

【中文标题】如何从 Node.js 中的 jwt 令牌获取 user.id?【英文标题】:How to get user.id from jwt token in Node.js? 【发布时间】:2019-05-22 16:14:28 【问题描述】:

在我的用户控制器中,我创建了一个令牌,当他登录到我的应用程序时,我将在其中保存该用户的 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`);
            );

【问题讨论】:

NodeJs - Retrieve user infor from JWT token?的可能重复 【参考方案1】:

制作一个中间件,在转发到更新路由之前检查传入的令牌。 该中间件应负责验证您在登录后从客户端代码传递的传入令牌(通常将令牌存储在 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`);
    );

【讨论】:

【参考方案2】:

您无需添加额外的代码。要访问 userId,请使用:

req.payload.id

【讨论】:

Si es necesario, el payload saldria undefined.

以上是关于如何从 Node.js 中的 jwt 令牌获取 user.id?的主要内容,如果未能解决你的问题,请参考以下文章

如何解码 Java 生成的 Node.js 中的 jwt 令牌?

如何将 jwt 令牌发送到 node.js 中的受保护路由

快速中间件中的 Node.js JWT 刷新令牌

如何在 Node JS 中使用 jwt 授权具有不同令牌的所有用户

如何延长node.js中相同jwt令牌的到期时间

为啥使用 JWT 而不是在 DB 中存储令牌来授权 Node.js 中的访问令牌?