我不能授权用户,我正在尝试控制台日志jwt_payload,但我看不到结果。我尝试通过控制台登录jwt_payload,但是我看不到任何日志。
passport.js
`const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const User = require('../models/user');
const config = require('../config/database');
module.exports = function(passport){
let opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeader();
opts.secretOrKey = config.secret;
passport.use(new JwtStrategy(opts,(jwt_payload, done) => {
console.log(jwt_payload);
User.getUserById(jwt_payload.sub,(err,user)=> {
if(err){
return done(err,false);
}
if(user){
return done(null,user);
}else {
return done(null,false)
}
});
}));
}` //user.js
router.get('/profile',passport.authenticate('jwt',{session:false}), (req , res , next) => {
res.json({user:req.user});
})
Thanks in advance.发布于 2017-07-25 16:38:29
在案例配置文件中请求受保护的路由以查看jwt_payload输出。如果您正确设置了其他设置,它应该会在控制台中记录类似以下{ '$__': { strictMode: true, selected: {}, getters: {}, _id: '59761655e1d793141048e7fc', wasPopulated: false, activePaths: { paths: [Object], states: [Object], stateNames: [Object] }, pathsToScopes: {}, emitter: { domain: null, _events: {}, _eventsCount: 0, _maxListeners: 0 } }, isNew: false, _doc: { __v: 0, password: '$2a$10$Ek/lrNKHQcRSuQX1H5c2VONOp5InudCI7KeAHkCw96EDkBcY9FEau', username: 'uzzol', _id: '59761655e1d793141048e7fc' }, '$init': true, iat: 1500966142 }的内容
我看不到你的getUserById方法,但我很确定你会得到一个错误,因为jwt_payload.sub在这里应该是未定义的(不要问我为什么).You可以使用User.findOne({id:jwt_payload.sub},callback)来查找用户。但是,如果你想通过mongoose findById方法获得用户,那么看看你从jwt_payload得到了什么。现在,您可以看到用户_id不在jwt_payload.sub下,而是在jwt_payload._doc._id下。所以你的代码应该是这样的User.findById({_id:jwt_payload._doc._id},callback);
请查看我的git存储库的工作版本:https://github.com/uzzol101/auth_app/tree/master
发布于 2020-04-22 06:47:40
如果您正在使用,
ExtractJwt.fromAuthHeaderAsBearerToken();使用持有者+您的通用令牌发送授权头,而不是JWT +您的通用令牌
https://stackoverflow.com/questions/44924039
复制相似问题