В KrakenJS, как объявить промежуточное программное обеспечение Passport перед другим?
Я использую Passport для аутентификации в моем проекте Kraken. Когда я вызываю authenticate, я передаю "failWithError: true", поэтому ошибка передается "следующему" обратному вызову. Затем у меня есть промежуточное ПО errorHandler, объявленное в config.json следующим образом:
"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());
});
Но это не работает. Кроме того, я нашел следующее: добавление способа настройки области видимости к заводской функции, но я не совсем понял, как заставить ее работать.
Большое спасибо.
1 ответ
Итак, наконец я вышел с решением. В моем случае мне не нужно промежуточное программное обеспечение сеанса из паспорта, так как я разрабатываю REST API.
Во-первых, объявление паспорта в config.json:
"passport": {
"enabled": true,
"priority": 10,
"module": {
"name": "passport",
"method": "initialize"
}
}
Затем в index.js я говорю паспорт, чтобы использовать мою стратегию:
passport.use(auth.localApiKeyStrategy());
Наконец, в контроллере модели я реализовал пользовательский обратный вызов, так как документы Passport говорят, что вы можете, что я нашел в 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);
};
Теперь я могу обработать аутентификацию и передать ошибку в свое промежуточное ПО errorHandler, используя следующую функцию.