【发布时间】:2017-03-27 10:18:18
【问题描述】:
我在为某些路由设置一些中间件时遇到了这个问题。在我的应用程序中,我的联系页面上只需要 session 和 csrf。
这就是问题所在。当我在外面需要它们并将数组中的引用用作路由参数时,一切正常。 Session 工作正常,并且期望每个请求都使用相同的 cookie(sessionID),并且应该通过 CSRF 检查。
但是,当我使用函数返回“中间件”数组时,它的行为异常。当我“获得”联系时,我收到一个 sessionID,当我向它“发布”时,显然会话重新启动,并且由于我有旧的 sessionID,我收到了一个错误。奇怪的是,CSRF 还期望另一个 csrf 令牌,而不是它发送给我的那个。
我知道这与我在模块中要求的方式有关,但我很想清楚地解释为什么会发生这种情况。请注意我是初学者,所以请放轻松:) 谢谢!
// MIDDLEWARE FOR CERTAIN ROUTES
// This works fine!
var session = require('express-session')({secret: 'i lit fire to the rain', saveUninitialized: false, resave: true});
var csrf = require('csurf')();
router.get('/contact', [session, csrf], function(req, res, next) {
});
router.post('/contact', [session, csrf], function(req, res, next) {
});
// but this does not work
var contactMiddleware = function() {
var session = require('express-session')({secret: 'i lit fire to the rain', saveUninitialized: false, resave: true});
var csrf = require('csurf')();
return [session, csrf];
};
router.get('/contact', contactMiddleware(), function(req, res, next) {
});
router.post('/contact', contactMiddleware(), function(req, res, next) {
});
【问题讨论】:
-
这和 PHP 有什么关系?
-
啊,搞错了:)
标签: node.js session express csrf middleware