我已经在节点服务器上设置了一个认证api,使用passportjs作为中间件,使用passport-jwt作为策略。
My passport.js file
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);