以前のSOの質問に従って、csrfミドルウェアがエクスプレスで動作するようになりました。トークンは正常に生成されますが、すべてのフォーム送信が拒否されます。
私が見ることができる唯一の可能な競合は、connect-redisを使用してセッションストアとしてredisを使用し、socket.ioをセッションにプラグインしていることですが、ソケットビットをコメントアウトしましたが、それでもうまく機能していません。
これは、私がミドルウェアと呼んでいる順序です。
(CoffeeScript)
app.configure ->
app.set 'views', __dirname + '/views'
app.set 'view engine', 'jade'
app.use express.bodyParser()
app.use express.methodOverride()
app.use express.cookieParser()
app.use express.session
secret: "itsasecret"
store: sessionStore
app.use express.csrf()
app.dynamicHelpers
token: (req, res) ->
req.session._csrf
app.use app.router
app.use express.static(__dirname + '/public')
投稿されたデータに対応するルートです。
(これは開発コードではありません。私がノードを学習しているだけです。オンラインにすると、これは怪物になることをよく知っています)
app.post '/admin/logintry', (req, res) ->
if req.body.username is 'Tim' and req.body.password is 'TempPassword'
req.session.adminIn = true
res.redirect '/admin/home'
else
res.redirect '/admin/login?failed=true'
フォームページでブラウザに到達しているHTMLは次のとおりです。
<input type="hidden" token="5ODFxml1QAhQvOmq1QE6Qd7n">
そして、「/ admin / logintry」から受け取った応答:
Forbidden
Node、Express、SOは初めてで、最近正しく学習されたjavascriptであり、どこから問題を探し始めるのかさえわかりません。掘り始めた場所だけでも、どんな助けでも大歓迎です。
乾杯。