2012-04-30 13 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-近い-見て私はここconfigに2つのトークン値

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

ための2つの異なるトークンを設定している http://aymsystems.com/ajax-csrf-protection-codeigniter-20

が私の見解ですが、私はFORM_OPEN

を使用しています

私は私が「エラーが発生したと一緒に「500内部サーバーエラー」を取得していますこれを実行すると、あなたが要求したアクションはない非同期呼び出し

<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> 

を作るために、このJavaScriptを使用しています応答として「許可」される。 FirebugはPOSTデータパラメータを正しく表示します。

例:ユーザ名=ルート&パスワード=ルート& csrf_token_name = 31961f17de5fa2df657ab1aba880f718

どのようにこれまで私はCSRFを削除した場合、AJAXリクエストが正常に動作し、私は応答

として200を取得し、誰もが私を助けてくださいことができます?

+0

気にしないで、わかりました。 jsファイルでcsrf_token_nameの代わりにトークン名を使うべきです。 token01:$( "input [name = token01]")。val() – ranilchaminda

+0

この質問を未回答のスタックから削除するには、これを質問の回答として追加してください。 – PaulSkinner

答えて

0

さらに良いことに、あなただけのjQueryのは、あなたのためのフォームデータをシリアライズさせることができます:

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

この方法であなたが入力の名前が変更されている以上のフィールドが追加されて心配する必要はありません。

関連する問題