2016-11-13 5 views
0

特定のルートに対してのみミドルウェアを設定していました。私のアプリケーションでは、私は連絡先ページにセッションとcsrfだけが必要です。関数が動作しないメソッドが必要です

ここに問題があります。私がそれらを外部に要求し、配列内の参照をルートパラメータとして使用すると、すべて正常に動作します。セッションはうまく動作し、すべての要求に対して同じCookie(sessionID)が必要であり、CSRFチェックは必要に応じて合格となります。

しかし、関数を使用して 'ミドルウェア'の配列を返すと、異常に動作します。私が連絡を取ると、私は1つの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) { 
}); 
+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

関連する問題