【问题标题】:Codeigniter csrf token with ajax request (500 internal server error)带有 ajax 请求的 Codeigniter csrf 令牌(500 内部服务器错误)
【发布时间】:2014-09-22 11:07:45
【问题描述】:

我很难通过启用 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

任何帮助将不胜感激。

【问题讨论】:

  • codeigniter 中的 csrf 令牌(据我所知)因无法正常工作而臭名昭著,因此不使用它要容易得多。

标签: php jquery ajax codeigniter csrf-protection


【解决方案1】:

在发布之前将 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 语句执行此操作。您可以单独添加它并进行序列化,但我已经展示了您缺少的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多