Паспорт JWT: req.user всегда не авторизован - PullRequest
0 голосов
/ 08 октября 2018

Я искал похожий вопрос о переполнении стека, но ни один из них не работает для меня, поэтому я задаю этот вопрос еще раз.

Я использую passport-jwt с express.

Я хочу войти в систему под идентификатором пользователя, чтобы сохранить его в другой модели.но каждый раз, когда я получаю 401 Unauthorized

здесь helpers / 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);
        });
    })
  );
};

здесь server.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)

routs / api / auth.js

 const router=express.Router();

 router.get('/user', passport.authenticate('jwt', { session: false }),controllers.auth.user);
  module.exports =router

controller / auth / user.js

module.exports=(req,res)=>{
    res.json({
        user:req.user
      });
}

Когда я пытался с почтальоном, но не работал.

enter image description here

Я также пытался с: ExtractJwt.fromAuthHeaderWithScheme('jwt'), поскольку в некоторых вопросах голосовали против, ноон не работает.

Я использую

"passport": "^ 0.4.0", "passport-jwt": "^ 4.0.0",
"jsonwebtoken": "^ 8.3.0"

, пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 08 октября 2018

Я решил вышеуказанные ошибки, заменив 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);
        });
    })
  );
};
...