Добавить аутентификацию паспорта только в определенную группу маршрутов - PullRequest
0 голосов
/ 01 марта 2019

Как я могу получить следующую стратегию для работы?

Я хочу добавить стратегию аутентификации jwt ко всем конечным точкам ниже /api/v1/apiKeys.

passport.use('jwtStrategy', new JwtStrategy({ passReqToCallback: true, jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), secretOrKey: process.env.APP_SECRET },
            (req: Request, payload, done) => {
                console.log('here');
                const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;

                if (ip !== payload.ip) {
                    done(new Error("Invalid token"), false);
                } else {
                    req.headers["clientId"] = payload.clientId;
                    done(null, true);
                }
            }));

        router.use("/api/v1/apiKeys", passport.authenticate('jwtStrategy', { session: false }));

        router.post("/api/v1/apiKeys/generateApiKey",  async (req, res) => {
            const keyConfig = req.body;
            const { clientId } = <any>req.headers;
            const result = await ApiKeysServiceInstance.buildApiKey(clientId, keyConfig);
            res.json(result);
        });

При текущей конфигурации я всегда получаю ответ 401 при попытке опубликовать на /api/v1/apiKeys/generateApiKey.

Если я добавлю метод passport.authenticate на уровне, он будет работать.Вот так:

router.post("/api/v1/apiKeys/generateApiKey",  passport.authenticate('jwtStrategy', { session: false })), async (req, res) => {
    const keyConfig = req.body;
    const { clientId } = <any>req.headers;
    const result = await ApiKeysServiceInstance.buildApiKey(clientId, keyConfig);
    res.json(result);
});

Спасибо за помощь.

...