表示应用层中间件和cookieSession,需要从前面的中间件中加入参数
Express application level middleware and cookieSession, need to add in parameter from prior middleware
我正在尝试将参数从一个中间件传递到下一个中间件。第一个中间件只是在 req.cookieKey 中存储一个密钥。第二个中间件使用的是 express 的 cookie-session。通常我会知道该怎么做,但是当我尝试在第二个中间件中 return cookieSession( 时出现问题。请参阅下面的代码和底部链接的 codesandbox.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 然后 return cookieSession 函数,但这似乎不起作用。我进行了测试以确保在设置 cookie 中间件时可以获得 req.cookieKey 但由于某种原因我无法使 cookieSession 正常工作。有人有什么建议吗?我已经包含了工作版本,但没有在此处传递参数:https://codesandbox.io/s/l2lw7499q9
cookieSession(options)
returnsfunction(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
})
我正在尝试将参数从一个中间件传递到下一个中间件。第一个中间件只是在 req.cookieKey 中存储一个密钥。第二个中间件使用的是 express 的 cookie-session。通常我会知道该怎么做,但是当我尝试在第二个中间件中 return cookieSession( 时出现问题。请参阅下面的代码和底部链接的 codesandbox.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 然后 return cookieSession 函数,但这似乎不起作用。我进行了测试以确保在设置 cookie 中间件时可以获得 req.cookieKey 但由于某种原因我无法使 cookieSession 正常工作。有人有什么建议吗?我已经包含了工作版本,但没有在此处传递参数:https://codesandbox.io/s/l2lw7499q9
cookieSession(options)
returnsfunction(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
})