所以我得到了这个策略来提取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) 用户未找到
答案 0 :(得分:0)
您的查询似乎错了!
尝试拨打User.findById(id, function(err, user) {})
或者
User.findOne({_id: id}, function(err, user) {})
希望它有所帮助!