6

Backbone.js モデルを使用して Yii Web アプリケーションに保存しようとしていますが、モデルがシリアル化されたフォームであり、Backbone.sync を使用してヘッダーを設定している場合でも、「CSRF トークンを検証できませんでした」という応答が返されます。

モデル (フォームには CSRF トークンが含まれており、「YII_CSRF_TOKEN」属性として送信されます):

var v = new ModelName ($('.formclass').serializeJSON()); 

JSON シリアライザー:

 //form.serializeJSON
 (function( $ ){
 $.fn.serializeJSON=function() {
 var json = {};
 jQuery.map($(this).serializeArray(), function(n, i){
 json[n['name']] = n['value'];
 });
 return json;
 };
 })( jQuery );

backbone.sync:

Backbone.old_sync = Backbone.sync;
     Backbone.sync = function(method, model, options) {
     var new_options =  _.extend({
         beforeSend: function(xhr) {
             console.log('backbone sync');
             var token = model.get('X_CSRF_TOKEN');
             console.log('token ='+token)
             if (token) xhr.setRequestHeader('YII_CSRF_TOKEN', token);
         }
     }, options)
        Backbone.old_sync(method, model, new_options);
 };

また、ヘッダーを「X_CSRF_TOKEN」として設定しようとしましたが、役に立ちませんでした。

4

3 に答える 3

0

YII_CSRF_TOKENはヘッダーではなく、単なるフォーム値です。この行によると、私たちのリクエストには含まれている必要があります

  • CSRF cookie。最初の非 XHR ページ読み込みによってすでに設定されています
  • YII_CSRF_TOKENという名前のフォームデータ値
于 2012-09-06T12:11:19.143 に答える
0

save() を使用してデータを送信する場合は、パラメーターで Cookie とセッション ID を送信する必要があります。このブログ投稿のキャッシュ バージョンを参照してください (現在オフラインであるため): http://webcache.googleusercontent.com/search?q=cache:tML1kmL08ikJ:blog.opperator.com/post/15671431847/backbone-js-sessions- and-authentication+&cd=1&hl=en&ct=clnk

于 2012-09-12T09:57:14.307 に答える
0

ローカルホストで作業している場合は、このスレッドに記載されているように、Cookie 認証を実行できるように仮想ホストをセットアップする必要がある場合があります:このスレッド

IE と Chrome は localhost からの Cookie を受け入れないため、それが原因である可能性があります

于 2012-12-17T12:52:33.383 に答える