【发布时间】: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