Промежуточное ПО уровня Express и cookieSession уровня, необходимо добавить в параметр из промежуточного ПО предыдущего уровня - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь передать параметр из одного промежуточного программного обеспечения в другое.Первое промежуточное программное обеспечение просто хранит секретный ключ в req.cookieKey.Второе промежуточное программное обеспечение использует cookie-сессию Express .Обычно я знаю, как это сделать, но что-то не работает, когда я пытаюсь вернуть cookieSession (во втором промежуточном программном обеспечении. См. Мой код ниже и пример на codeandbox.io, связанный внизу.

Это промежуточное программное обеспечение стоит первым:

const asyncMiddleware = async (req,res,next) => {
    const data = await SecretKeeper.getCredentialPair('cookie');
    req.cookieKey = data.credential;
    next()
  }

В моих маршрутах я звоню:

    //get key from SecretKeeper to encrypt cookie that will be set in next middleware
    app.use(asyncMiddleware);

    //set cookie middleware, use key from SecretKeeper to sign and verify cookie
    app.use((req, res, next) => {

        return cookieSession({
            name: 'MySession',
            keys: [req.cookieKey],

            // Cookie Options
            maxAge: .30 * 60 * 60 * 1000 // 30 min
        })
    })

Это работает, если я не пытаюсь добавить ключ от SecretManager (первое промежуточное ПО) и удаляюдополнительный функциональный слой (req, res, next) => из моего второго промежуточного программного обеспечения.

Я надеялся, что смогу использовать req.cookieKey, который я установил ранее, а затем просто вернуть функцию cookieSession, но это, похоже, не работает.чтобы убедиться, что я могу получить req.cookieKey при настройке промежуточного программного обеспечения cookie, но по какой-то причине я не могу заставить cookieSession работать правильно. У кого-нибудь есть предложения? Я включил рабочую версию, не передавая здесь параметр: https://codesandbox.io/s/l2lw7499q9

1 Ответ

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

cookieSession(options) возвращает function(req, res, next), поэтому вы должны запустить его:

app.use((req, res, next) => {

    cookieSession({
        name: 'MySession',
        keys: [req.cookieKey],

        // Cookie Options
        maxAge: .30 * 60 * 60 * 1000 // 30 min
    })(req, res, next) //here
})
...