2016-08-10 10 views
0

上で実行されていない、ここpassport.authenticateが、私は特急プロジェクトでの認証のためのパスポート - JWT戦略を使用して、ルート

は、このディレクトリ内のMTパスポート-JWT configです:

var JwtStrategy = require('passport-jwt') 
 
\t .Strategy, 
 
\t ExtractJwt = require('passport-jwt') 
 
\t .ExtractJwt; 
 

 
var User = require(__dirname + '/../models/user'); 
 
var config = require(__dirname+ '/database'); 
 

 
module.exports = function(passport) { 
 
    console.log("here: passport-jwt"); 
 
\t var opts = {} 
 
\t opts.jwtFromRequest = ExtractJwt.fromAuthHeader(); 
 
\t opts.secretOrKey = config.secret; 
 
\t passport.use(new JwtStrategy(opts, function(jwt_payload, done) { 
 
\t \t User.findOne({ 
 
\t \t \t id: jwt_payload.id 
 
\t \t }, function(err, user) { 
 
\t \t \t if (err) { 
 
\t \t \t \t return done(err, false); 
 
\t \t \t } 
 
\t \t \t if (user) { 
 
\t \t \t \t done(null, user); 
 
\t \t \t } else { 
 
\t \t \t \t done(null, false); 
 
\t \t \t } 
 
\t \t }); 
 
\t })); 
 
};
/config/passport.js

と/routes/account.jsディレクトリ内のアカウントのルートに私はこの方法でそれを呼び出す:

var passport = require('passport'); 
require(__dirname + '/../config/passport')(passport); 

router.post('/', passport.authenticate('jwt', { 
session: false 
}), function(req, res) { ... } 

しかし、問題は、認証のためのパスポート機能は実行されません。 「here:passport-jwt」は表示されませんでした。

ここで問題はありますか?

答えて

0

まず、ルートは次のように宣言する必要があります。

これらの行を追加した後:

var passport = require('passport'); 
app.use(passport.initialize()); 

あなたがすべき次の行を追加します。

var account = require(__dirname + '/routes/account')(app, express, passport); 
app.use('/account', account); 

とルート自体に:

module.exports = function(app, express, passport) { 

    var router = express.Router(); 

    router.post('/', function(req, res) { 

     passport.authenticate('jwt', function(err, user) { 
     if (err) { 
       res.sendStatus(406); 
      } else { 
       if (!user) { 
        res.sendStatus(400); 
       } else {...} 
      } 
     }); 
     } 

    } 
} 

私のミスは、それはモジュールの1行目にconsole.log("here: passport-jwt");を入れて、実際にpassport.use(..)部分が毎回実行されました!

と最後の事はあなたがMongoDBのネイティブIDを使用したい場合、あなたは_id代わりのidを照会する必要があり、パスポートの設定でfindOne一部、passport.use(...)一部でした!

ので、正しいコードは次のとおりです。

User.findOne({ 
      _id: jwt_payload.id 
     }, function(err, user) { 
       ... 
      }); 
1

たぶん、あなたはこれを試みることができる:app.js内のすべての

router.get('/', function(req, res) { 
    passport.authenticate('jwt', 
     { 
     session: false 
     }); 
}); 
+0

私はこれを試してみましたが、問題はまだそこにあります。 経路の方法はポスト(多分違いです)。 – Pourya8386

関連する問題