2016-09-05 7 views
0

Я использую Passport для аутентификации в своем проекте Kraken. Когда я вызываю аутентификацию, я передаю «failWithError: true», поэтому ошибка передается «следующему» обратному вызову. Я тогда есть ErrorHandler промежуточное программное обеспечение объявленную как это в config.json:В KrakenJS, как объявить промежуточное ПО Passport перед другим?

"errorHandler": { 
    "priority": 130, 
    "module": "path:./lib/errorHandler" 
} 

Моя проблема заключается в том, что паспорт возвращает ошибку напрямую, так что я думаю, что это проблема приоритетов.

Я попытался регистрации паспорт, как это:

app.requestBeforeRoute = function requestBeforeRoute(server) { 
    server.use(passport.initialize()); 
}; 
passport.use(auth.localApiKeyStrategy()); 

И как это:

app.on('middleware:before:errorHandler', function (eventargs) { 
    passport.use(auth.localApiKeyStrategy()); 
    app.use(passport.initialize()); 
}); 

Но это не работает. Кроме того, я нашел это: Adding a way to configure a scope to factory function, но у меня пока не получилось, как заставить его работать.

спасибо.

ответ

0

Итак, наконец, я вышел с решением. В моем случае мне не требуется промежуточное программное обеспечение сеанса из паспорта, так как я разрабатываю REST API.

Во-первых, паспорт декларации в config.json:

"passport": { 
    "enabled": true, 
    "priority": 10, 
    "module": { 
     "name": "passport", 
     "method": "initialize" 
    } 
} 

Тогда в index.js, я говорю, паспорт использовать свою стратегию:

passport.use(auth.localApiKeyStrategy()); 

Наконец, в контроллере модели Я реализовал пользовательский обратный вызов, как паспортные документы говорят, что вы можете, что я расположен в auth.js

router.get('/', function(req, res, next) { 
    auth.authenticate(req, res, next, function() { 
     // authenticated 
     // stuff to do when authenticated 
    }); 
}); 

// auth.js 
exports.authenticate = function(req, res, next, callback) { 
    passport.authenticate('localapikey', function(err, device) { 
     if (err) { 
      return next(err); 
     } 
     if (!device) { 
      err = new Error(); 
      err.code = statusWell.UNAUTHORIZED; 
      return next(err); 
     } 
     callback(); 
    })(req, res, next); 
}; 

Теперь я могу час andle authentication и позже передайте ошибку в мое промежуточное ПО errorHandler, используя следующую функцию.