Паспорт JWT: req.user всегда не авторизован
Я искал похожий вопрос о переполнении стека, но ни один из них не работает для меня, поэтому я задаю этот вопрос еще раз.
Я использую Passport-JWT, чтобы с express
,
Я хочу войти в систему с идентификатором пользователя, чтобы сохранить его в другой модели. но каждый раз я получаю 401 Несанкционированный
вот помощники / passport.js
const options = {};
options.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
options.secretOrKey = configuration.secret_key.JWTsecretkey;
module.exports = passport => {
passport.use(
new JwtStrategy(options, (jwt_payload, done) => {
console.log('jwt_payload ==',jwt_payload);
User.findById(jwt_payload.id)
.then(user => {
if (user) {
return done(null, user);
}
return done(null, false);
})
.catch(err => {
console.log(err);
return done(err, false);
});
})
);
};
вот сервер.js
global.express = require('express');
global.app = express();
global.passport = require('passport');
global.jwt = require('jsonwebtoken');
global.JwtStrategy = require('passport-jwt').Strategy;
global.ExtractJwt = require('passport-jwt').ExtractJwt;
global.requireTree = require('require-tree')
global.controllers = requireTree(rootdir+'/controllers')
global.routes=requireTree(rootdir+'/routes')
global.helpers = requireTree(rootdir + '/helpers')
app.use(passport.initialize())
require(rootdir+'/helpers/passport')(passport)
app.use('/api/auth',routes.api.auth);
app.listen(8888)
маршруты / API / auth.js
const router=express.Router();
router.get('/user', passport.authenticate('jwt', { session: false }),controllers.auth.user);
module.exports =router
Контроллеры / авт / user.js
module.exports=(req,res)=>{
res.json({
user:req.user
});
}
Когда я пытался с почтальоном, но не работает.
Я также пытался с: ExtractJwt.fromAuthHeaderWithScheme('jwt')
так как в некоторых вопросах голосуют, но это не работает.
я использую
"passport": "^ 0.4.0", "passport-jwt": "^ 4.0.0",
"jsonwebtoken": "^ 8.3.0"
Пожалуйста, помогите мне решить эту проблему.
1 ответ
Я решил вышеуказанные ошибки, заменив
User.findById(jwt_payload.id)
сUser.findById(jwt_payload._id)
здесь обновляется passport.js
const options = {};
options.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
options.secretOrKey = configuration.secret_key.JWTsecretkey;
module.exports = passport => {
passport.use(
new JwtStrategy(options, (jwt_payload, done) => {
console.log('jwt_payload ==',jwt_payload);
User.findById(jwt_payload._id)
.then(user => {
if (user) {
return done(null, user);
}
return done(null, false);
})
.catch(err => {
console.log(err);
return done(err, false);
});
})
);
};