[英]Laravel 4 CSRF form submit through Ajax call
我是Stackoverflow和Laravel 4的新手,我試圖通過jquery ajax提交表單。 我serializeArray()表單並使用json提交它。 在laravel中,在檢查提交的csrf令牌的路徑中,轉到我的控制器進行過程輸入。 當_token輸入與serializeArray()一樣在數組中時,csrf檢查不起作用。 我必須得到_token值並提交作為單獨的ajax數據。 我想知道是否有辦法告訴csrf過濾器哪里運行檢查輸入數組的hte字段_token並使用它? 這是我的代碼:
routes.php文件
Route::post('searchAjax', array('before' => 'csrf',
'uses' => 'SearchController@searchAjax'));
這是我想要讀取數組[0] ['_ token]的地方,但我不知道如何告訴它這樣做。
index.js
var form = $('#search').serializeArray();
var token = $('#search > input[name="_token"]').val();
$.ajax({
type: 'post',
url: 'searchAjax',
dataType: 'json',
data: { _token: token, form: form },
success: function(data) {
for(var key in data)
{
//alert(key)
}
//alert(data.message);
}
});
我想在ajax調用中刪除{_token:token,form:form},並且只有'form',它已經是一個帶有_token的數組。 這是html:
<form id="search" class="form-horizontal" accept-charset="UTF-8" action="http://testing:998/search" method="POST">
<input type="hidden" value="6GBbv9LmnOdL8UcOsm8DDJ4Bfi6eGcQRlC9SPdL4" name="_token">
<div class="control-group">
<label class="control-label" for="title">Book Titles</label>
<div class="controls">
<input id="title" class="input" type="text" value="click to search book titles" name="title">
</div>
</div>
<div class="control-group">
<div class="control-group">
<div class="control-group">
</form>
先感謝您。 :)
另一種選擇是使用Kelt Dockins概述的方法,即使用jquery在頭文件中發送令牌,例如。 你的jquery / javascript bootstrapping中的某個地方添加:
$.ajaxSetup({
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}
});
這將從頭元數據標記中獲取CSRF令牌,並將其包含在每個ajax請求的標頭中。 然后,您需要將元數據和令牌添加到Laravel模板中,例如。
<head>
<title>My Page</title>
<meta name="csrf-token" content="<?= csrf_token() ?>">
您還需要修改CSRF過濾器以檢查ajax請求標頭以及默認的Input :: get('_ token')
Route::filter('csrf', function()
{
$token = Request::ajax() ? Request::header('X-CSRF-Token') : Input::get('_token');
if (Session::token() != $token) {
throw new Illuminate\Session\TokenMismatchException;
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.