Тайм-аут проблема с промежуточным ПО Express - PullRequest
0 голосов
/ 17 февраля 2019

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

this.checkJwt =  jwt({
    secret: jwksRsa.expressJwtSecret({
        cache: true,
        rateLimit: true,
        jwksRequestsPerMinute: 5,
        jwksUri: process.env.AUTH0_JWKS,
    }),
    // Validate the audience and the issuer.
    audience: process.env.AUTH0_AUDIENCE,
    issuer: process.env.AUTH0_ISSUER,

    algorithms: ["RS256"],
});

Затем я применяю его для использования с моим маршрутом:

app.route(routes.getUserInfo)
     .get(checkJwt, this.userController.me);

Почему, когда я переписываю свое промежуточное ПО с оператором return, оно перестает работать?Например:

this.checkJwt = (req, res, next) => {
    return jwt({
        secret: jwksRsa.expressJwtSecret({
            cache: true,
            rateLimit: true,
            jwksRequestsPerMinute: 5,
            jwksUri: process.env.AUTH0_JWKS,
        }),
        // Validate the audience and the issuer.
        audience: process.env.AUTH0_AUDIENCE,
        issuer: process.env.AUTH0_ISSUER,

        algorithms: ["RS256"],
    });
};

Я получал исключение тайм-аута при каждом запросе этого промежуточного программного обеспечения.Похоже, функция next никогда не трогает.

1 Ответ

0 голосов
/ 17 февраля 2019

Я не знаю, что такое метод jwt - пользовательское промежуточное ПО или просто пакет jwt?

Также я вижу, что вы возвращаете вызов jwt без передачи req, res, next:

this.checkJwt = (req, res, next) => {
    return jwt({
        secret: jwksRsa.expressJwtSecret({
            cache: true,
            rateLimit: true,
            jwksRequestsPerMinute: 5,
            jwksUri: process.env.AUTH0_JWKS,
        }),
        // Validate the audience and the issuer.
        audience: process.env.AUTH0_AUDIENCE,
        issuer: process.env.AUTH0_ISSUER,

        algorithms: ["RS256"],
    });
};

результат выполнения во время вызова промежуточного программного обеспечения равен [Function](req, res, next), который, как ожидается, будет выполнен - ​​не возвращен.

, поэтому, если это промежуточное программное обеспечение, попробуйте переписать его следующим образом:

const checkJwt = (req, res, next) => {
    jwt({
        secret: jwksRsa.expressJwtSecret({
            cache: true,
            rateLimit: true,
            jwksRequestsPerMinute: 5,
            jwksUri: process.env.AUTH0_JWKS,
        }),
        // Validate the audience and the issuer.
        audience: process.env.AUTH0_AUDIENCE,
        issuer: process.env.AUTH0_ISSUER,

        algorithms: ["RS256"],
    })(req, res, next);
};

app.get(routes.getUserInfo, checkJwt, this.userController.me)

Но если jwt метод не является промежуточным программным обеспечением, и он возвращает true or false в результате:

const checkJwt = (req, res, next) => {
    const result = jwt({
        secret: jwksRsa.expressJwtSecret({
            cache: true,
            rateLimit: true,
            jwksRequestsPerMinute: 5,
            jwksUri: process.env.AUTH0_JWKS,
        }),
        // Validate the audience and the issuer.
        audience: process.env.AUTH0_AUDIENCE,
        issuer: process.env.AUTH0_ISSUER,

        algorithms: ["RS256"],
    });

    // if jwt returns something (:
    if (!result) {
      return res.status(401).send('Unauthorized');
    }
    next();
};

app.get(routes.getUserInfo, checkJwt, this.userController.me)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...