2012-04-30 115 views
2

我想在我的CI 2.1应用程序中使用ajax获得CSRF工作。无法让CSRF与ajax一起工作(CI 2.1)

我已经搜索关于这一点,发现几个指导,推进但couln't解决问题 http://ericlbarnes.com/post/10728867961/codeigniter-csrf-protection-with-ajax http://www.beheist.com/index.php/en/blog/csrf-protection-in-codeigniter- 2-0-A-靠近光看是我的看法,我使用form_open

http://aymsystems.com/ajax-csrf-protection-codeigniter-20

我已经在配置

$config['csrf_protection'] = TRUE; 
$config['csrf_token_name'] = 'token01'; 
$config['csrf_cookie_name'] = 'token02'; 
$config['csrf_expire'] = 7200; 

这里设置两个不同的令牌两个令牌值

我使用这个JavaScript进行异步调用

<script type="text/javascript"> 
$(document).ready(function(){ 


     $("#submit").click( 

     function(){ 
      var form_data = { 
       username: $("#username").val(), 
       password: $("#password").val(), 
       csrf_token_name: $("input[name=token01]").val() 
      }; 


      $.ajax({ 
      type: "POST", 
      url: "http://localhost/pis/user", 
      data: form_data, 
      success: 
       function(data){ 
       $("#debug").html(data.message).css({'background-color' : data.bg_color}).fadeIn('slow'); 
       } 

      }); 

      return false; 

     }); 


    }); 

</script> 

当我运行此我得到一个“500内部服务器错误”与“一个错误沿着遇到,您所要求的动作不允许“作为回应。 Firebug正确显示POST数据参数。

例如:用户名=根&密码=根& csrf_token_name = 31961f17de5fa2df657ab1aba880f718

如何过,如果我删除了CSRF,Ajax请求运行良好,我也得到200响应

谁能帮助我,请?

+0

没关系,想通了。我应该在js文件中使用标记名称而不是csrf_token_name。 token01:$(“输入[名称= token01]”)VAL() – ranilchaminda

+0

请添加为回答这个问题,以便从没有答案的堆栈中删除这个问题,接受它。 – PaulSkinner

回答

0

更妙的是,你可以让jQuery的序列化表单数据为您提供:

var form_data = $(this).serialize(); 

这样你就不必担心输入被重命名或添加更多的字段。