2012-03-23 4 views
3

私はCodeigniter 2.1.0とCSRFで動作するようにUploadify 2.1.4を取得しようとしています。私は運があまりありません。私は私に戻って投げHTTP 500を取得した画像をアップロードする際Codeigniter + CSRFを使用してUploadifyを取得するにはどうすればよいですか?

$(function() { 
     var cct = $.cookie('csrf_cookie_name'); 
     $('#uploadifyMe').uploadify({ 
      'uploader'  : '<?php echo site_url(); ?>js/uploadify/uploadify.swf', 
      'script'   : '<?php echo site_url(); ?>upload/', 
      'cancelImg'  : '<?php echo site_url(); ?>js/uploadify/cancel.png', 
      'multi'   : true, 
      'auto'   : false, 
      'fileExt'  : '*.jpg;*.jpeg', 
      'fileDesc'  : 'Image Files (JPG, JPEG)', 
      'fileDataName' : 'imgData', 
      'queueID'  : 'fileQueue', 
      'simUploadLimit' : 1, 
      'sizeLimit' : 7340032, 
      'removeCompleted': false, 
      'scriptData' : { 'csrf_token_name' : cct, 'upload' : 'true' }, 
      'onSelectOnce' : function(event, data) { 
       $('.uploadifyProgress').addClass('progress'); 
       $('.uploadifyProgressBar').addClass('bar'); 
      }, 
      'onComplete' : function(e, i, f, r, d) { 
       console.log(r); 
      }, 
      'onError' : function(e, i, f, eO) { 
       console.log(eO); 
       if(eO.info == 500) { 
        $('#status').prop('class', 'alert alert-error').html('<a class="close" data-dismiss="alert">&times;</a><h4>Hmmm. Something gone wrong it has.</h4> Yoda has discovered that your security token has expired. This is because you have been here for longer than two hours. we cannot refresh your key automatically, please refresh the page and try again.'); 
       } 
      } 
     }); 
}); 

問題がある:私は非常に基本的なアップロードコントローラ& uploadifyため、次のコードを持っています。私は今、CSRFが有効になっていることを知っています。

私は問題の解決策を試しました。私のコードで見ることができるものと、ここからのセッションデータをクローンしてCSRFキーで送信するものですが、何も動作しません。 CSRFをオフにしない限り、私はいつもHTTP 500で終わります。

誰かが本当に感謝してもらえると助けてくれたら。私はこの質問がたくさん聞かれるように思えるし、それは私をナッツにしている。 CSRFを標準のAJAXリクエストと一緒に渡すという副作用はうまく動作しますが、アップロードするだけでは問題ありません。

+0

小さなメモ。 CSRFを有効にしている間は、一致ユーザーエージェントオプションは無効になっています。 – Vunus

答えて

2

このコードを使用すると、CSRFの対象外のコントローラメソッドの配列を定義できます。https://github.com/EllisLab/CodeIgniter/pull/236

+1

私は答えがちょっと遅かったと思っていますが、これは治療になりました。それ以来、私はLaravelを使ってCSRFシステムを使いやすくしているようですクライアントのニーズ。 – Vunus

0

問題は、Uploadifyが全く異なるブラウザのような、セッションが異なるFlashオブジェクトを使用しているため、CookieデータをPOSTするとCSRFがセッションと一致しないことです。

オリジナルのCSRF関数をMY_Security.phpファイルでオーバーライドし、POSTなどでセッションクッキー全体を送信し、CSRFが読むことができるようにする必要があります一致させることができる。

また、https://github.com/blueimp/jQuery-File-UploadのようなHTML5アップローダを試してみると、少なくとも上書きをしなくてもよいというチャンスが得られます。

+0

こんにちは。答えをありがとう。私はアップロードフォームのCSRFのオーバーライドを追加しました。とにかくシステムを使用しないことに決めたクライアントを出します。 :( – Vunus

関連する問題