通过jwt和passportjs验证,passport.authenticate永远不会到达我的JwtStrategy

时间:2017-10-03 13:43:30

标签: node.js jwt passport.js

我在使用passportjs和jwt进行身份验证时遇到了问题。我在get请求中发送授权标头并收到未经授权的响应。我的第一个想法是,我可能会用令牌搞乱一些东西,所以我试图记录jwt_payload。

在我看来,passport.authenticate()甚至没有运行我的passport.js文件中的任何代码,因为下面的console.log(jwt_payload)从不记录任何内容

/config/passport.js

module.exports = function(passport) {
    let opts = {};
    opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
    opts.secretOrKey = config.secret;

    passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
        console.log(jwt_payload);
        User.getUserById(jwt_payload._id, (err, user) => {
            if(err){
                return done(err,false);
            }
            if(user){
                return done(null,user);
            } else {
                return done(null, false);
            }
        });
    }));
}

上面的passport.use(...)子句必须做某事,如果我删除它,我会收到错误的未知身份验证策略" jwt"

以下是我的护照设置和passport.authenticate()电话的代码。

/routes/users.js

const passport = require('passport');
const jwt = require('jsonwebtoken');
const config = require('../config/database');

router.get('/profile', passport.authenticate('jwt', {session:false}), (req, res, next) => {
  res.json({user: req.user});
});

app.js

const passport = require('passport');

app.use(passport.initialize());
app.use(passport.session());

require('./config/passport')(passport);

0 个答案:

没有答案