Node.js JWT,从令牌获取user_id

时间:2016-07-27 22:47:57

标签: node.js mongodb token jwt

强烈的文字我正在构建node.js + mongodb rest api。我使用jwt用户身份验证,我有一个问题。我需要获取经过身份验证的用户(user_id,name)的详细信息,认为它们可以从令牌中获取,但我不知道如何执行此操作。怎么可能呢?

已更新

我正在发帖子

array_push($non_empty, $array1);

// instead of
$non_empty='$array1';

我需要插入文章集合作者id(user_id),但我不知道如何获得经过身份验证的user_id。

试图这样做:

router.route('/articles')

  .post(function (req, res) {

      var article= new Article();      
      article.user_id = ???; // here needs user_id
      article.imdb_id = req.body.imdb_id;
      article.title = req.body.title;
      article.thumb = req.body.thumb;

      article.save(function(err) {
          if (err)
              res.send(err);

          res.json({ message: 'Added' });
      });

  });

decode返回有关用户的所有信息(名称,密码,_id)。是否可以从这里获得user_id和名称?

1 个答案:

答案 0 :(得分:0)

当您签署JSON Web令牌时,您可以将其传递给用户对象。在这里,您可以存储您需要的任何用户数据。然后对该对象进行签名和编码,并将其设置为令牌。当您向API传递请求时,如果JWT有效,则验证函数应将此用户对象返回给您。

我喜欢使用Hapi框架来创建我的Restful API,所以我将使用Hapi给出一个例子。

在server.js文件中,您需要注册hapi-auth-jwt2包:

server.register(require('hapi-auth-jwt2'), (err) => {
    if (err) {
        throw err;
    }

    server.auth.strategy('jwt', 'jwt', {
        key: config.jwt.secret,
        validateFunc: auth.validate,
        verifyOptions: { algorithms: ['HS256'] }
    });

    server.auth.default('jwt');
});

您的验证功能:

export default {
    validate: (tokenObject, req, callback) => {
        validateToken(tokenObject.user_id, (err, user) => {
            if (err) {
                callback(Boom.unauthorized('User is unauthorized.'), false);
            } else {
                req.user = user;
                callback(null, true);
            }
        });
    }
};

validateToken函数应该使用您从令牌获取的用户ID并查询该用户。如果找到用户,则表示您知道该令牌有效,您可以返回并存储其余的用户信息。

要创建令牌,我使用“jsonwebtoken”包:

generateToken: (user_id, name, callback) => {
    'use strict';
    callback(null, JWT.sign({
        user_id: user_id,
        name: name
    }, config.JWT.SECRET, {
        expiresIn: 86400
    }));
}