我无法授权用户,我正在尝试控制日志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.
答案 0 :(得分:1)
在案例配置文件中向受保护路由发出请求,以查看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
在这里应该是未定义的(不要问我为什么)。你可以使用{{1找到一个用户。但是,如果您想通过mongoose User.findOne({id:jwt_payload.sub},callback)
方法获取用户,请查看从findById
获得的内容。现在您看到用户_id不在jwt_payload
下,而是在jwt_payload.sub
下。所以你的代码应该是这样的jwt_payload._doc._id
请检查我的git存储库以查找工作版本:https://github.com/uzzol101/auth_app/tree/master
答案 1 :(得分:0)
如果您正在使用
ExtractJwt.fromAuthHeaderAsBearerToken();
发送带有 Bearer +您生成的令牌的授权标头,而不是 JWT +您生成的令牌