我在使用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);