我碰到这个,同时设置一些中间件只为某些路线。在我的应用程序中,我只需要在联系页上使用会话和csrf。需要方法调用功能不能正常工作
这是问题所在。当我需要它们并使用数组中的引用作为路由参数时,它可以正常工作。会话工作正常,并期望每个请求和CSRF检查通过相同的cookie(sessionID),因为它应该。
但是,当我使用函数返回一个“中间件”数组时,它的行为异常。当我'联系'时,我收到一个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有什么关系? –
啊,这是一个错误:) – donnyjeremiah