2016-11-13 24 views
0

Я столкнулся с этим, установив некоторое промежуточное программное обеспечение только для определенных маршрутов. В моем приложении мне нужна только сессия и csrf на моей странице контактов.требуется метод, вызываемый функцией не работает

В этом проблема. Когда я требую их снаружи и использую ссылки в массиве в качестве параметра маршрута, он отлично работает. Сессия работает отлично и ожидает того же файла cookie (sessionID) для каждого запроса и проверки CSRF, как и должно.

Но, когда я использую функцию для возврата массива «промежуточного программного обеспечения», он ведет себя ненормально. Когда я «получаю» контакт, я получаю один 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) { 
}); 
+0

Что это нужно делать с PHP? –

+0

А, это была ошибка :) – donnyjeremiah

ответ

0

Привет вы пытались сделать это вместо:

router.get('/contact', contactMiddleware, function(req, res, next)

редактировать: так что вам нужно только статический массив, насколько я понимаю, так почему бы не просто делать это

var array = (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', array, function(req, res, next) { res.send('contact'); });

+0

Я сделал, но это запрос, используемый для «зависания», и поэтому я вызвал next() в конце функции. Я закончил получать 404, и это просто не получилось. – donnyjeremiah