2017-10-07 118 views
0

你好,我試圖在我的webapp上實現passport-jwt。但它不會工作我見過幾個相同的職位,並試圖做他們做的,但在我的情況下,它沒有奏效。護照Jwt未授權

這裏有一些Authenticating node API with passport-jwt

passport local strategy not getting called

Passport-jwt Unauthorized

我已經試過那些和它沒有工作。 這裏是我的代碼在我的passport.js

var config = require('./config'); 

var JwtStrategy = require('passport-jwt').Strategy, 
    ExtractJwt = require('passport-jwt').ExtractJwt; 
module.exports = 
    function(passport){ 
     var opts ={}; 
     opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken(); 
     opts.secretOrKey = config.secret; 
      passport.use(new JwtStrategy(opts,function(jwt_payload,done){ 
       console.log('HERE'); 
       console.log(jwt_payload); 
       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); 
         }) 

        })); 
      }; 

它甚至不會達到console.log('HERE');

,這是我如何生成我令牌

router.post('/login',function(req,res,next){ 
    var username = req.body.username; 
    var password = req.body.password; 
    User.findUser(username,function(err,user){ 
     if(err) return res.json({success:false,msg:"Error"}); 
     if(!user) return res.json({success:false,msg:"No Such user"}); 
     //res.json(user); 
     console.log(user); 
     if(user){ 
      User.comparePass(password,user.password,function(err,IsMatched){ 
       if(err) return res.json({success:false,msg:'error}); 
       if(!IsMatched) return res.json({success:false,msg:"wrong password"}); 
       if(IsMatched){ 
        var token = jwt.sign(user.toObject(),config.secret,{expiresIn:604800}); 
        res.json({success:true,token:'JWT '+ token, 
          user:{ 
           name:user.name, 
           username:user.username, 
           password:user.password, 
           email:user.email, 
           contact:user.contact, 
           address:user.address 
          } 
        }); 

       } 
      }); 
     } 
    }); 
}); 

,這裏是什麼即時試圖訪問

router.get('/profile',passport.authenticate('jwt',{session:false}), function(req, res, next) { 
    res.json({user:req.user}); 
}); 

謝謝!

回答

0

好吧,我已經想通了。

ExtractJwt.fromAuthHeaderWithScheme('jwt') 

,而不是

ExtractJwt.fromAuthHeaderAsBearerToken();