2017-01-16 2 views
0

私は既にStackoverflowで複数の回答を確認していますが、ドキュメントも参照していますが、問題は何かを見つけることはできません。私のアプリケーションでは、SequelizeJSを使用してmySQLデータベースにアクセスしていますが、今はJWT戦略を使用してPassportJSでREST APIエンドポイントを保護しようとしています。PassportJS、SequelizeJS、JWTトークンを使用すると、req.userは未定義です

./app.js

// ... 
// passport 
app.use(passport.initialize()); 
require('./config/passport')(passport); 
// ... 

./config/passport.js

var passport  = require('passport'); 
var passportJwt = require('passport-jwt'); 
var models  = require('../models'); 
var config  = require('./config'); 

var ExtractJwt = passportJwt.ExtractJwt; 
var Strategy = passportJwt.Strategy; 

module.exports = function(passport) { 
    var params = { 
     secretOrKey: config.jwt.secret, 
     jwtFromRequest: ExtractJwt.fromAuthHeader() 
    }; 

    passport.use(new Strategy(params, function(jwt_payload, done) { 
     models.User.findOne({ 
      where: { 
       id: jwt_payload.id 
      } 
     }).then(
      function(user) { 
       if (user) { 
        done(null, user); 
       } else { 
        done(null, false); 
       } 
      }, 
      function(err) { 
       return done(err, false); 
      } 
     ); 
    })); 
}; 

私はこの単純なルートのリクエストからユーザエンティティを取得しようとしている:

var router = express.Router(); 
// ... 
router.route('/user/me', passport.authenticate('jwt', { session: false })) 
    .get(function(req, res) { 
     console.log(req.user); 
     res.json(req.user); 
    }); 

私はすでに、提供されたユーザー名とパスワードに基づいてJWTトークンを返す別のルートを作成しました。私は/user/meエンドポイントを呼び出すと、私には、例えば、ヘッダにJWTトークンを添付:

Authorization: JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MX0.M9z3iWNdjAu4THyCYp3Oi3GOWfRJNCYNUcXOw1Gd1Mo 

だから、私の問題は、私はトークンで/user/meエンドポイントを呼び出すときに、req.userが不定になりますと、私は理解できないということですその理由は何か。

ありがとうございました!

+0

のようななめらかでなければなりません、あなたは何をお使いのモデルの検索クエリのリターンをチェックしましたか?私は.then()関数のユーザを意味します –

+0

Strategyの中でどのようにクエリをチェックすることができないのですか?ハードコーディングされた{id:1}フィルタで実行され、うまくいきます。 JSONオブジェクトを返します。 – peetya

答えて

2

あなたのルート定義は間違っているようです:router.routeは2番目の引数にミドルウェアを受け入れないため、認証はまったく行われません。

それは念のために

var router = express.Router(); 
// ... 
router.route('/user/me') 
    .all(passport.authenticate('jwt', { session: false })) 
    .get(function(req, res) { 
     console.log(req.user); 
     res.json(req.user); 
    }); 
+0

ありがとう、私には恥ずかしがり屋:) – peetya

関連する問題