我碰到這個,同時設置一些中間件只爲某些路線。在我的應用程序中,我只需要在聯繫頁上使用會話和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