2016-10-04 90 views
1

試圖讓鳳凰城的ajax工作。我通過執行以下操作獲得CSRF令牌,所以我把它:鳳凰CSRF令牌不匹配

<input type="hidden" id="_csrf_token" name="_csrf_token" value="<%= get_csrf_token() %>"> 

然後使用它像這樣:

$.ajax({ 
    type: "POST", 
    url: "<%= lesson_path @conn, :create %>", 
    beforeSend: function(xhr) 
    { 
    token = $('#_csrf_token').val(); 
    xhr.setRequestHeader('_csrf_token', token); 
    }, 
    data: data, 
    success: function(data, textStatus, jqXHR) { 
    alert(textStatus); 
    } 
}); 

的問題是,該令牌我得到的是不正確的令牌。看着谷歌瀏覽器檢查員,我得到一個403請求,說有一個無效的csrf標記。有效會話令牌總是不同於它給我的令牌。得到像這樣的東西IiJndz5FeV9MMhIKMzggUTtmHUALAAAAkJ/6Yr/k4BxdiKmiaMUqsw==它通常想要這樣的東西hHAg7V4xpjnZsM8Z+H1xw==

任何想法,爲什麼我會得到一個不同的令牌比它想要的?

我曾嘗試以下還有:

Plug.Conn.get_session(conn, :csrf_token) 
Map.get(conn.req_cookies, "_csrf_token") 

兩個結果沒有返回。

回答

2

令牌可以通過帶有鍵「_csrf_token」的參數或帶有名稱「x-csrf-token」的頭部的請求發送。

嘗試設置你的頭與關鍵:

x-csrf-token 
+0

剛玩這個周圍,就是這樣。謝謝!!! –

+0

很高興幫助。 – TheAnh