2016-07-08 7 views
0

をトリガしていないされていることを確認し、私はパスポート-JWTコールバックがパスポート・JWTと遊ぶ

(パスポート-HTTPを使用して)私のトークンを取得するための基本的な-HTTPエンドポイントを設定してきたそれは動作します。私は自分の成功を定義したい

| passport documentationで説明したパターン使用して、エラーのコールバック:私はないそうであるように

app.get('/login', function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
    if (err) { return next(err); } 
    if (!user) { return res.redirect('/login'); } 
    req.logIn(user, function(err) { 
     if (err) { return next(err); } 
     return res.redirect('/users/' + user.username); 
    }); 
    })(req, res, next); 
}); 

は今、私はパスポート-JWT私のルートのいくつかのためのミドルウェアとして働いて取得したいです繰り返しpassport.authenticateを呼び出さなければなりません。リターン401を認証(私は、私が働いて認証を得ることができないトークンを取得していますにもかかわらず

router.get('/', filter, function(req, res, next) { 
    // doing some business 
}); 

: は、だから私は、このモジュールの設定:

var logger = require('../util/logger'); 
var cfg = require('../cfg'); 
var router = require('express').Router(); 
var passport = require('passport'); 
var JwtStrategy = require('passport-jwt').Strategy; 
var User = require('../model/user'); 


var opts = {}; 

opts.jwtFromRequest = function(req) { 
    var token = null; 
    if (req && req.cookies) { 
    token = req.cookies.jwt; 
    } 
    logger.info('jwtFromRequest::token: ' + token); // shown: 'JWT <token_string>'' 
    return token; 
}; 

opts.secretOrKey = cfg.secret; 

passport.use(new JwtStrategy(opts, function(jwt_payload, done) { 
    logger.info('verify::authenticating request using jwtStrategy'); // not shown 
    User.findOne({ 
    username: jwt_payload.username 
    }, function(err, user) { 
    if (err) { 
     logger.info('verify::error: ' + err); 
     return done(err, false); 
    } 
    if (user) { 
     logger.info('verify::user: ' + user); 
     return done(null, user); 
    } else { 
     logger.info('verify: user not found'); 
     return done(null, false); 
    } 
    }); 
})); 

var Filter = function(req, res, next) { 
    passport.authenticate('jwt', { 
    session: false 
    }, function(err, user) { 
    if (err) { 
     logger.error(err); 
     return next(err); 
    } 
    if (!user) { 
     var payload = {} 
     logger.info("filter::user " + user); // shows false 
     if (req.params && req.params.resource) { 
     payload.resource = req.params.resource 
     } 
     payload.message = 'authentication failure' 
     return res.status(401).send(payload); // 401 is sent 
    } 
    next(); 

    })(req, res, next); 
} 

module.exports = Filter; 

をそしてそう、私のルートを行きます)、私は、ベリファイ機能にログ記録命令を追加していない)。

passport-jwt source codeによると、私はカスタム関数jwtFromRequestが呼び出されたことについては気にしませんが、検証関数は明らかにそうではありません。

なぜこの関数は呼び出されないのですか?

答えて

0

私の間違い。問題は、ここでは必要ないように思われるthis tutorialに示すように、私は自分のトークンに「JWT」を追加していたということでした。

関連する問題