2011-03-13 14 views

cevap

16

Bu sorun, Devise ile ilgili değil. Kısacası, Rails 3.0.4'ten beri, GET olmayan her isteğin CSRF belirtecine sahip olması gerekir, aksi halde oturum silinir.

şimdi tüm olmayan GET istekleri için gerekli olacak bu düzeltme iki önemli değişiklikler CSRF koruma değişti başarısız davranışı ve simge vardır.

bu yamayı uyguladıktan sonra artık HTTP 500 hataları, yerine seans sıfırlanır üretecektir CSRF istekleri başarısız oldu. Kullanıcılar, bu davranışını, kendi denetleyicilerinde handle_unverified_request geçersiz kılarak geçersiz kılabilir. Burada

Diğer ayrıntılar:

Ajax.Responders.register({ 
    onCreate: function(request) { 
    var csrf_meta_tag = $$('meta[name=csrf-token]')[0]; 

    if (csrf_meta_tag) { 
     var header = 'X-CSRF-Token', 
      token = csrf_meta_tag.readAttribute('content'); 

     if (!request.options.requestHeaders) { 
     request.options.requestHeaders = {}; 
     } 
     request.options.requestHeaders[header] = token; 
    } 
    } 
}); 
: En AJAX ile kullanmak http://weblog.rubyonrails.org/2011/2/8/csrf-protection-bypass-in-ruby-on-rails

jQuery pasajı size prototipi kullanıyorsanız, aşağıdaki kodu gerekir

$(document).ajaxSend(function(e, xhr, options) { 
    var token = $("meta[name='csrf-token']").attr("content"); 
    xhr.setRequestHeader("X-CSRF-Token", token); 
}); 

istekleri

-1

Rails 3.0.5 + Devise (1.x + 1.2RC) de aynı sorunu yaşadım: Kullanıcı belirli AJAX isteklerinde oturumunu kapatıyor.

Şimdilik bunu önlemek için tek çözüm, Rails 3.0.3'e düşürülmesidir.

+0

Tamam .. Bir süre 3.0.3 tutacağım .. thanx! –

4

Ajax yok çağrıları yokken aynı sorunu yaşıyordum, eski düzenlerimin başlığında yalnızca <% = csrf_meta_tag%> eksikti.

İlgili konular