Passport JWT没有返回正确的用户

时间:2017-08-29 15:58:12

标签: javascript node.js express jwt passport.js

所以我得到了这个策略来提取jwt并从请求中返回用户。这是代码:

module.exports = function(passport) {
  var opts = {};
  opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
  opts.secretOrKey = process.env.JWT_SECRET;
  passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
    console.log('PAYLOAD RECEIVED: ')
    console.log(jwt_payload)
    User.findOne({id: jwt_payload.id}, function(err, user) {
      if (err) {
        return done(err, false);
      }
      if (user) {
        console.log('USER ' + user.username)
        done(null, user);
      } else {
        console.log('ELSE')
        done(null, false);
      }
    });
  }));
};

无论有效负载是什么,我总是从数据库中获取第一个用户。 我看到所有教程都使用jwt_payload.id,但当我console.log(jwt_payload.id)时,它返回未定义,当我尝试像jwt_payload._doc._id那样提取ID时,我会在console.log时获得正确的ID但找不到用户。这是代码:

module.exports = function(passport) {
  var opts = {};
  opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
  opts.secretOrKey = process.env.JWT_SECRET;
  passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
    console.log('PAYLOAD RECEIVED: ')
    let id = jwt_payload._doc._id
    console.log(id)
    User.findOne({id: id}, function(err, user) {
      if (err) {
        return done(err, false);
      }
      if (user) {
        console.log('USER ' + user.username)
        done(null, user);
      } else {
        console.log('USER NOT FOUND')
        done(null, false);
      }
    });
  }));
};

输出是: 收到的付款方式: 59a44431fcd0a9495f64f94c (这是正确的ID) 用户未找到

1 个答案:

答案 0 :(得分:0)

您的查询似乎错了!

尝试拨打User.findById(id, function(err, user) {})

或者

User.findOne({_id: id}, function(err, user) {})

希望它有所帮助!