2017-12-12 4 views
0

경로에서 'passport.authenticate ('jwt ', {session : false})'를 사용하면 'Unauthorized'가 반환됩니다. 여권 미들웨어가 작동하지 않는 것 같습니다. 나는 무엇이 잘못되었는지를 모른다! 헤더에서 'Authorization : JWT MY_TOKEN'을 사용하고 있습니다.노드 익스프레스 : Passport JWT 미들웨어가 실행되지 않음

app.js는

// ...code 

const app = express(); 
app.use(bodyParser.json()); 
app.use(passport.initialize()); 
require('./config/passport')(passport); // passport middleware file 

app.use('/api/auth', auth); // routes 
app.use('/api/lists', lists); // routes 

파일.

여권 미들웨어 파일 :

const { Strategy, ExtractJwt } = require('passport-jwt'); 
const User = require('../models/User'); 
const keys = require('./keys'); 

module.exports = (passport) => { 
    const opts = {}; 
    opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken(); 
    opts.secretOrKey = 'MYSECRETKEY'; 

    // HERE IS EXECUTED! <<<<<<<< 

    passport.use(new Strategy(opts, function(jwt_payload, done) { 
     // HERE IS NOT BEING EXECUTED! <<<<<<<< 

     User.findOne({_id: jwt_payload.id}, function(err, user) { 
      if (err) { 
       return done(err, false); 
      } 
      if (user) { 
       return done(null, user); 
      } else { 
       return done(null, false); 
      } 
     }); 
    })); 
} 

.

로그인 경로 (토큰을 생성) :

opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken(); 

당신이 구성 옵션을 호출하고 있기 때문에, 헤더 모양을 할 필요가 :

router.post('/login', (req, res, next) => { 
    const { email, } = req.body; 

    User.findOne({ email: email }, { password: 0 }, (errQuery, resUser) => { 
    const token = jwt.sign({_id: resUser.id}, 'MYSECRETKEY'); 

    const responseData = { 
     status: true, 
     token: `JWT ${token}` 
    }; 

    res.send(responseData); 
    }); 
}); 

답변

2

문제는이 라인이다 :

Authorization: Bearer MY_TOKEN 
+0

감사합니다. 나는 그것을 몰랐다! 설명서에는 JWT TOKEN_STRING 만 사용하도록 작성되었습니다! 감사!! – Victor