2017-11-26 13 views
0

私のアプリでは、official docsのコードを持っていますが、1つの違いを除いて:私はGETではなくPOSTリクエストに応答してxsrfTokenを送信します。ExpressでPOSTリクエストでcsrfTokenを取得する方法はありますか?

var cookieParser = require('cookie-parser') 
var csrf = require('csurf') 
var bodyParser = require('body-parser') 
var express = require('express') 

// setup route middlewares 
var csrfProtection = csrf({ cookie: true }) 
var parseForm = bodyParser.urlencoded({ extended: false }) 

var app = express() 

// we need this because "cookie" is true in csrfProtection 
app.use(cookieParser()) 

app.post('/getCsrfToken', /*csrfProtection,*/ function (req, res) { 
    // check credentials from request.body 
    // and then 

    res.render('send', { csrfToken: req.csrfToken() }) //EXCEPTION: csrfToken is not a function 
}) 

app.post('/process', parseForm, csrfProtection, function (req, res) { 
    res.send('data is being processed') 
}) 

私は卵鶏の問題に直面している:私はcsrfProtectionを有効にした場合、私はトークンなしでエンドポイントのコードに取得することはできませんが、私はそれを無効にした場合、req.csrfTokenは不定となります。

urlパラメータとしてパスワードを公開しないため、gerCsrfTokenエンドポイントをPOSTにする必要があります。

答えて

0

質問はcsurf maintainerさんから回答されました。ありがとうございました。

https://github.com/expressjs/csurf/issues/133

(トリッキー)溶液は、この特定のエンドポイント

app.post('/authenticate', csrf({ cookie: true, ignoreMethods: ['POST'] }), function (req, res) { 
ためのPOSTメソッドを無視することです
関連する問題