В 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, используя следующую функцию.

Другие вопросы по тегам