2012-04-30 2 views
2

Я пытаюсь получить работу CSRF с ajax в моем приложении CI 2.1.Не удалось получить CSRF для работы с ajax (CI 2.1)

я искал об этом и нашел несколько Guidlines, но 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-а-ближе-смотрите 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; 

Вот мое мнение, я использую Form_Open

<?php echo form_open("http://localhost/pis/user"); ?> 
<div id="inputs"> 

<?php echo form_input($username);?> 
<?php echo form_password($password);?> 
</div> 


<div id="actions"> 

<div style="float:left"><?php echo form_submit($submit);?> 

<!-- <input type="button" value="Login" id="submit" name="submit" onclick="clicksubmit()" /> --> 

</div> 

</div> 

<?php echo form_close();?> 

Я использую этот JavaScript, чтобы ASync позвонить

<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

Ничего, разобрался. Я должен использовать имя токена вместо csrf_token_name в js-файле. token01: $ ("input [name = token01]"). Val() – ranilchaminda

+0

Пожалуйста, добавьте это как ответ на вопрос и примите его, чтобы удалить этот вопрос из неотвеченного стека. – PaulSkinner

ответ

0

Даже лучше, вы можете просто позволить JQuery сериализовать данные формы для вас:

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

Таким образом, вам не придется беспокоиться о том входы переименования или несколько полей добавляются.

Смежные вопросы