我正在學習使用鳳凰框架,我試圖做一個控制器動作的AJAX後 - 但是,我遇到了CSRF保護問題。鳳凰城 - 在AJAX postFlow CSRF後
對於初學者來說,我使用的不是一個形式 - 只是想從一個輸入文字傳遞給控制器:
<input type="text" id="raw-input" />
<button id="send-button">Send it!</button>
<script>
$("#send-button").click(function(){
var input = $("#raw-input").val();
$.ajax({
url: "/test/process",
type: "POST",
dataType: "json",
beforeSend: function(xhr) {xhr.setRequestHeader("X-CSRF-Token", $("meta[name='csrf-token']").attr("content"))},
data: {"input" : input},
success: function(response){
console.log(response);
}
});
});
</script>
控制器(不擔心做什麼input
尚未...只是想驗證成功後):
def process(conn, %{"input" => input}) do
IO.puts "got it!"
end
和路由器:
post "/test/process", TestController, :process
我幾乎從一個Rails應用程序的$.ajax
調用中取得了很好的效果,但這裏並沒有這樣做 - 運行這個會返回一個403錯誤並記錄(Plug.CSRFProtection.InvalidCSRFTokenError) invalid CSRF (Cross Site Request Forgery) token, make sure all requests include a valid '_csrf_token' param or 'x-csrf-token' header
。
任何人都可以提供任何指導?謝謝!
你在你的html中有CSRF元標記嗎? – Gazler
謝謝@Gazler - 我也可以通過添加meta標籤來解決這個問題。我之前測試時缺少的東西是Phoenix期望參數爲'_csrf_token',在上面的問題中您甚至可以看到這個參數。只是錯過了那個小細節...好吧,現場學習! – skwidbreth