首页 文章

带有ajax请求的Codeigniter csrf令牌(500内部服务器错误)

提问于
浏览
3

我很难通过启用了csrf令牌的CI表单来尝试发出ajax请求 . 我一直在做长时间的研究,并且我想出了与此相关的每个问题都发布了相同的解决方案,即将令牌val添加到ajax请求中的序列化数据中 . 我在我的ajaxSetup中做了这个,我得到了令牌,但仍然遇到了同样的问题..这是我的代码 .

//AJAX Setup

$.ajaxSetup({

    data:{

        csrf_test_name: $("input[name='csrf_test_name']").val()
    }

 });  

//Function ajax login

$("form#login").on("submit", function(e){

    var $this = $(this);
    var mensaje = $("div.msglogin");

    $.ajax({

        type: "POST",
        url: $this.attr("action"),
        data: $this.serialize(),
        beforeSend: function() {
            mensaje.html('<p><img src="public/frontend/img/miniloader.gif"><span><small> Iniciando..</small></span></p>');
        }
    })

    .done (function(data){
        console.log($this.serialize());
            if(data == "redirect"){
                window.location.replace($("input#baselogin").val());
            }else{
                mensaje.html(data);
            }
    })

    e.preventDefault();

});

这是我在console.log $ this.serialize()时得到的,这意味着正在发送令牌

csrf_test_name=4a4d6eb47fc8f0c8e932b3b56a4eb9c5&usuario=dan&password=meaannn

任何帮助将不胜感激 .

1 回答

  • 4

    在发布之前将CSRF令牌添加到 data 选项:

    $.ajax({
        type: "POST",
        url: $this.attr("action"),
        data: {'<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>',/*....your data....*/},
        beforeSend: function() {
            mensaje.html('<p><img src="public/frontend/img/miniloader.gif"><span><small> Iniciando..</small></span></p>');
        }
    })
    

    CSRF令牌需要随每个请求一起发送,因此应该由数据指定 . echo 语句执行此操作 . 您可以单独添加和序列化,但我已经显示了您缺少的内容 .

相关问题