0
jwt로 여권 인증을 구현하고 싶지만 실행 후 토큰이 있지만 get 함수가 작동하지 않습니다. 내가 passport.authenticate를 제거하면 잘 동작합니다. passport.authenticate가 get 함수에 추가되면 console.logs도 작동하지 않습니다.JWT를 사용하는 nodejs에서 여권 인증이 작동하지 않습니다.
내 passport.js 파일 코드
const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const User = require('./../server/models/user');
module.exports = function(passport){
console.log('passport');
let opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken('jwt')
opts.secretOrKey = "secretkey";
passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
console.log(jwt_payload);
User.getUserById(jwt_payload._doc._id, (err, user) => {
if(err){
return done(err, false);
}
if(user){
return done(null, user);
}else{
return done(null, false);
}
});
}));
}
api.js (수 기능)
router.get('/profile', passport.authenticate('jwt', {session: false}),
function(req, res){
console.log("prof");
res.json({user: req.user});
});
의 user.js (모델) 당신이 우편 배달부에서 토큰을 복사
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
var bcrypt = require('bcrypt-nodejs');
const userSchema = new Schema({
username: { type:String, lowercase:true, required:true, unique:true},
password: { type:String, required:true},
email: { type:String, lowercase:true, required:true, unique:true},
});
userSchema.pre('save', function(next){
var user = this;
bcrypt.hash(user.password, null, null, function(err, hash) {
// Store hash in your password DB.
if(err) return next(err);
user.password = hash;
next();
});
})
const User = module.exports = mongoose.model('User', userSchema);
module.exports.getUserById = function(id, callback){
User.findById(id, callback);
}
module.exports.getUserByUsername = function(username, callback){
const query = {username: username};
User.findOne(query, callback);
}
module.exports.comparePassword = function(candidatePassword, hash, callback)
{
bcrypt.compare(candidatePassword, hash, function(err, isMatch) {
if(err){
throw err;
}
callback(null, isMatch);
});
}