【问题标题】:How to submit form in ajax after setting CSRF protection TRUE in codeigniter?在codeigniter中设置CSRF保护TRUE后如何在ajax中提交表单?
【发布时间】:2020-08-03 07:11:52
【问题描述】:

我正在使用 ajax 提交一个表单,并在 config.php 中启用 CSRF 保护。第一次,表单提交良好,但第二次显示错误“禁止。不允许您请求的操作。403”。如何通过将 CSRF 保护设置为 true 来使用 ajax 安全地提交表单。 下面是我正在使用的ajax函数。

$('#loginfrmbtn').on('click', function(){
  $(this).prop('disabled', true);
  var formdata=$('#loginfrm').serialize();
  $.ajax({
    type: 'POST',
    data: formdata,
    url: '<?php echo base_url('logincheck');?>',
    dataType: 'json',
    success: function(res){
      $('#loginfrmbtn').prop('disabled', false);
      console.log(res);
      
    }, error: function(jqXHR){
      console.log(jqXHR);
    }
  })
})

【问题讨论】:

    标签: codeigniter


    【解决方案1】:

    尝试使用 jQuery ajax 函数 (https://api.jquery.com/jquery.ajax/) 的 headers 选项在每个请求中发送 csrf 令牌,如下所示:

    $.ajax({
        ...
        headers:{
            'X-CSRF-TOKEN': $( 'input[id="csrf_tsecurity"]' ).val(),
        },
        ...
    });
    

    还有下面的codeigniter配置:

    public $CSRFTokenName  = 'csrf_tsecurity';
    public $CSRFHeaderName = 'X-CSRF-TOKEN';
    public $CSRFRegenerate = false;
    

    【讨论】:

    • 我希望重新生成的令牌为真。
    • 您需要更新您的 csrf_tsecurity 输入字段。即喜欢这里:stackoverflow.com/a/56380192/7952420 您可以在成功/错误/完成回调中执行此操作。
    猜你喜欢
    • 2015-04-26
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 2015-02-23
    • 2013-02-13
    • 2013-07-09
    相关资源
    最近更新 更多