passport-jwt令牌无法授权

时间:2017-07-05 10:44:37

标签: node.js express authentication

我无法授权用户,我正在尝试控制日志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.

2 个答案:

答案 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 +您生成的令牌