【问题标题】:Passport JWT not returning right userPassport JWT 没有返回正确的用户
【发布时间】:2018-02-07 04:09:54
【问题描述】:

所以我得到了这个策略来提取 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) 未找到用户

【问题讨论】:

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


    【解决方案1】:

    看来你的查询是错误的!

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

    或者

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

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2019-02-06
      • 2018-11-05
      • 2021-10-11
      • 1970-01-01
      • 2018-09-14
      • 2018-07-10
      • 2014-11-26
      • 1970-01-01
      相关资源
      最近更新 更多