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);
});
});
감사합니다. 나는 그것을 몰랐다! 설명서에는 JWT TOKEN_STRING 만 사용하도록 작성되었습니다! 감사!! – Victor