2017-10-23 11 views
0

ためcsrf_tokenを無視しています。フェニックスは、私はこのAJAX要求を持っているAJAXリクエスト

<meta name="csrf" content="<%= Plug.CSRFProtection.get_csrf_token() %>" /> 

これは、Chromeで見ることができる各Ajaxリクエストとともにサーバーに送信されます。しかし、私のサーバーは常に返します:

"403: invalid CSRF (Cross Site Request Forgery) token, make sure all requests include a valid '_csrf_token' param or 'x-csrf-token' header" 

なぜですか?これを修正するには?

+0

あなたのフロントエンドのコードで 'console.log(document.querySelector(" meta [name = csrf] ")content)'してここに結果を投稿してもよろしいですか? – mudasobwa

+0

これに関する最新情報はありますか? –

答えて

0

名前は "csrf"の代わりに "csrf-token"でなければならないと思います。これは私がapp.html.eexに使用するものである(それはex_turbolinksライブラリのreadmeからだ。

<meta name="csrf-token" content="<%= get_csrf_token() %>"> 
<meta name="csrf-param" content="_csrf_token"> 

ビューでちょうどget_csrf_token/0を使用するためには、しかし、あなたは輸入品のリストにget_csrf_token: 0を追加する必要がありますmy_app_web.exでview機能でPhoenix.Controllerからたとえば:。。

lib/my_app_web.ex 

def view do 
    quote do 
    ... 
    # Import convenience functions from controllers 
    import Phoenix.Controller, only: [get_flash: 2, view_module: 1, 
    get_csrf_token: 0] 
    ... 
    end 
end 
0

name="csrf-token" id="csrf-token" value="<%= Plug.CSRFProtection.get_csrf_token() %>" はこれを試してみてくださいこれは私

var xhr = new XMLHttpRequest(); 
var csrf_token = document.getElementById('csrf-token').value; 
xhr.open('POST', '/api/vote'); 
xhr.setRequestHeader('Content-Type', 'application/json'); 
xhr.setRequestHeader("X-CSRF-Token", csrf_token); 
のために働いています10

これは私のajaxリクエストです

関連する問題