我在我的代码中遇到了一个奇怪的错误或错误。 我在 Node 服务器上设置了一个 auth api,使用 passportjs 作为我的中间件和 passport-jwt 作为我的策略。
我的 Passport 设置是这样的
//add jwt strategy to passport
var JwtStrategy = require('passport-jwt').Strategy;
var ExtractJwt = require('passport-jwt').ExtractJwt;
var User = require('../models/user');
var configDB = require('../config/database');
module.exports = function(passport) {
var opts = {};
opts.secretOrKey = configDB.secret;
opts.jwtFromRequest = ExtractJwt.fromAuthHeader();
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
//find user with give jwt payload id
User.findOne({
id: jwt_payload.id
}, function(err, user) {
if(err) {
return done(err, false);
}
if(user) {
done(null, user);
} else {
done(null, false);
}
});
}));
};
然后,我的保护路线:
apiRoutes.get('/account', passport.authenticate('jwt', {session: false}), function(req, res) {
console.log(req.user.nickname); //returns user1 no matter what JWT I supply with request
console.log(jwt.decode(getToken(req.headers), configDB.secret)).nickname; //decodes user from token correctly
..do other stuff
});
为什么无论我在 Authorization header 中提供什么 Token,passport 每次都将 req.user 设置为同一用户? 谢谢
最佳答案
已解决, 这条线引起了问题:
User.findOne({
id: jwt_payload.id
...
两个id都应该是_id :)
关于node.js - Node passport-jwt 从 token 中提取错误的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39706014/