Laravel 4 CSRF表单通过Ajax调用提交

我是Stackoverflow和Laravel 4的新手,我试图通过jquery ajax提交表单。 我serializeArray()表单并使用json提交它。 在laravel中,在检查提交的csrf令牌的路径中,转到我的控制器进行过程输入。 当_token输入与serializeArray()一样在数组中时,csrf检查不起作用。 我必须得到_token值并提交作为单独的ajax数据。 我想知道是否有办法告诉csrffilter哪里运行检查输入数组的hte字段_token并使用它? 这是我的代码:

routes.php文件

Route::post('searchAjax', array('before' => 'csrf', 'uses' => 'SearchController@searchAjax')); 

这是我不想读取数组forms[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:

 

先感谢您。 🙂

另一个选择是使用Kelt Dockins概述的方法,即使用jquery在头文件中发送令牌,例如。 你的jquery / javascript bootstrapping中的某个地方添加:

 $.ajaxSetup({ headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') } }); 

这将从头元数据标记中获取CSRF令牌,并将其包含在每个ajax请求的标头中。 然后,您需要将元数据和令牌添加到Laravel模板中,例如。

  My Page  

您还需要修改CSRFfilter以检查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; } });