2017-07-05 7 views
0

ユーザーを認証できません。ログjwt_payloadをコンソールにしようとしていますが、結果が表示されません。私はログjwt_payloadをコンソールにしようとしましたが、ログは表示されません。passport-jwtトークンが認証されない

passport.js

`const JwtStrategy = require('passport-jwt').Strategy; 
const ExtractJwt = require('passport-jwt').ExtractJwt; 
const User = require('../models/user'); 
const config = require('../config/database'); 

module.exports = function(passport){ 
    let opts = {}; 
    opts.jwtFromRequest = ExtractJwt.fromAuthHeader(); 
    opts.secretOrKey = config.secret; 
    passport.use(new JwtStrategy(opts,(jwt_payload, done) => { 
     console.log(jwt_payload); 
     User.getUserById(jwt_payload.sub,(err,user)=> { 
      if(err){ 
       return done(err,false); 
      } 
      if(user){ 
       return done(null,user); 
      }else { 
       return done(null,false) 
      } 

     }); 
    })); 
}` 

//user.js

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

Thanks in advance. 

答えて

1

jwt_payload出力を見るために、あなたのケースプロファイルで保護されたルートにリクエストしてください。あなたが他のものを設定した場合 が正しくそれは(私に聞かないでください、私はあなたのgetUserById方法を見ることができないが、私はjwt_payload.subがここに未定義する必要があるので、あなたはエラーになりますかなり確信しているこの{ '$__': { strictMode: true, selected: {}, getters: {}, _id: '59761655e1d793141048e7fc', wasPopulated: false, activePaths: { paths: [Object], states: [Object], stateNames: [Object] }, pathsToScopes: {}, emitter: { domain: null, _events: {}, _eventsCount: 0, _maxListeners: 0 } }, isNew: false, _doc: { __v: 0, password: '$2a$10$Ek/lrNKHQcRSuQX1H5c2VONOp5InudCI7KeAHkCw96EDkBcY9FEau', username: 'uzzol', _id: '59761655e1d793141048e7fc' }, '$init': true, iat: 1500966142 }

のようなものをログコンソールすべきですあなたはUser.findOne({id:jwt_payload.sub},callback)を使ってユーザーを見つけることができます。しかし、mongoose findByIdメソッドでユーザを取得したい場合は、jwt_payloadから何を得るかを見てください。ユーザー_idがjwt_payload.subではなく、jwt_payload._doc._idの下にあることがわかりました。ので、あなたのコードのようなものでなければなりません。この User.findById({_id:jwt_payload._doc._id},callback);

作業バージョンのための私のgitリポジトリをチェックしてください:https://github.com/uzzol101/auth_app/tree/master

+1

おかげで、私はすでにそれを解決してきた私は 'トークンにスペースを追加することができませんでした。 ' JWT '+ token' – vikvincer

+1

このトークンを試してください: 'JWT' + token'。 JWTの後に余分なスペースがあることに気付く。 –

関連する問題