Могу ли я использовать passport-jwt условно?

Это означает, что в моем приложении я хочу проверить, присутствует ли customId в клиентском запросе. Если да, я продолжу аутентификацию, используя это с моей собственной логикой. Если customId нет, я хочу использовать аутентификацию passport-jwt.

Паспорт регистрирует свой метод инициализации при запуске самого сервера. Мой конкретный вопрос: как мне использовать passport.authenticate, только если customId отсутствует.

Буду признателен за любую оказанную помощь.

1 ответ

Решение

Да, вы можете, это всего лишь промежуточное ПО! Вот пример того, как вы это сделаете, я не запускал этот код, поэтому он может не собираться, но он показывает, как делать то, что вам нужно.

const express = require('express');
const passport = require('passport');
const passportJWT = require('passport-jwt');

// My express application where I setup routers, middleware etc
const app = express();

// Initialise passport
app.use(passport.initialize());

// Setup my passport JWT strategy, this just setups the strategy it doesn't mount any middleware
passport.use(new passportJWT.Strategy({
    secretOrKey: '',
    issuer: '',
    audience: '',
}, (req, payload, done) => {
    doSomeFancyAuthThingy(payload, (err, user) => {
        done(err, user);
    });
}));

// Now create some middleware for the authentication
app.use((req, res, next) => {
    // Look to see if the request body has a customerId, in reality
    // you probably want to check this on some sort of cookie or something
    if (req.body.customerId) {
        // We have a customerId so just let them through!
        next();
    } else {
        // No customerId so lets run the passport JWT strategy
        passport.authenticate('jwt', (err, user, info) => {
            if (err) {
                // The JWT failed to validate for some reason
                return next(err);
            }

            // The JWT strategy validated just fine and returned a user, set that
            // on req.user and let the user through!
            req.user = user;
            next();
        });
    }
});

Как видите, главное, что вы ищете, - это то, где мы создаем промежуточное программное обеспечение. Здесь мы просто создаем наше собственное промежуточное программное обеспечение и запускаем проверку (оператор if), если она терпит неудачу, тогда мы запускаем passport.authenticate, который запускает стратегию, которую мы создали на passport.use блок.

Это позволит вам условно выполнить любую аутентификацию с помощью Passport!

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