在codeigniter中启用csrf时使用ajax时出现403禁止错误

时间:2017-05-20 12:52:31

标签: ajax codeigniter

我正在使用启用了csrf的codeigniter。我正在制作一些ajax帖子请求但不知何故我得到403帖子禁止错误。我的文件夹结构是这样的,我已经包含了这个js,其中ajax代码写在应用程序文件夹之外。我用于ajax请求的代码是

var data = {
    name: $('.name').val(),
    crm_csrf_token: $('input[name="crm_csrf_token"]').val()
} 
var url = 'http://demo/signup/signup';
$.ajax({
    url: url,
    dataType: 'json',
    type: 'post',
    contentType: 'application/json',
    data: data,
    success: function( data, textStatus, jQxhr ){
        console.log(data);
        console.log(textStatus);
        console.log(jQxhr);
    },
    error: function( jqXhr, textStatus, errorThrown ){
        console.log(jqXhr);
        console.log(textStatus);
        console.log(errorThrown);
    }
});

所以我哪里错了。在进行这个ajax调用之前我也在使用javascript验证表单。在应用程序forlder之外也无法访问site_url()和base_url。

2 个答案:

答案 0 :(得分:0)

试试这个对我有用,我想你的网址有问题。在这里我纠正这个,可能适合你。

<强> JQuery的

var data = {
    name: $('.name').val(),
    crm_csrf_token: $('input[name="crm_csrf_token"]').val()
}

//Url should be index.php/YourControllerName/YourMethodName
var url = '<?php echo base_url(); ?>index.php/demo/signup';
$.ajax({
    url: url,
    dataType: 'json',
    type: 'post',
    contentType: 'application/json',
    data: data,
    success: function( data, textStatus, jQxhr ){
        console.log(data);
        console.log(textStatus);
        console.log(jQxhr);
    },
    error: function( jqXhr, textStatus, errorThrown ){
        console.log(jqXhr);
        console.log(textStatus);
        console.log(errorThrown);
    }
});

CI控制器:

<?php

class demo extends CI_Controller {
    public function signup()
    {
            echo 'Hello World!';
    }
}

问候!

答案 1 :(得分:0)

你只需要通过使用jquery cookie发送csrf令牌,你可以从这里下载它 https://github.com/js-cookie/js-cookie

现在在你的ajax电话中

$。AJAX({

url:url,
data:{
   "<?php echo $this->security->get_csrf_token_name(); ?>": Cookies.get('your_csrf_cookie_name_in_config')
    },
method :"POST",
success:function(data){
 $("#city").html(data);
}

});