当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Laravel4CSRF表单通过Ajax调用提交》经验,为你挑选了1个好方法。

我是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:

先感谢您.:)



1> glendaviesnz..:

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

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

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


    My Page
    

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

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有