NodeJs Express passport-jwt 从令牌中获取错误的用户

NodeJs Express passport-jwt getting wrong user from token

我在节点服务器上设置了一个身份验证 api,使用 passportjs 作为我的中间件和 passport-jwt 作为我的策略。

我的passport.js文件

let JwtStrategy = require("passport-jwt").Strategy,
  ExtractJwt = require("passport-jwt").ExtractJwt;

// load up the user model
let User = require("../models/user");
let config = require("../config/database"); // get db config file

module.exports = function (passport) {
  var opts = {};
  opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme("jwt");
  opts.secretOrKey = config.secret;
  passport.use(
    new JwtStrategy(opts, function (jwt_payload, done) {
      User.findOne({ id: jwt_payload.id }, function (err, user) {
        if (err) {
          return done(err, false);
        }
        if (user) {
          done(null, user);
        } else {
          done(null, false);
        }
      });
    })
  );
};

要解决此问题:更改

User.findOne({ id: jwt_payload.id }, 

User.findOne({ _id: jwt_payload._id }, 

当您按 objectId 搜索时,您可以使用

User.findById(jwt_payload.id);