SORU
26 ŞUBAT 2011, CUMARTESİ


Ajax post on Rails yeniden oturum değil

Raylar ve ajax jQuery belirli bir WordPress kullanmak için olduğunu sanmıyorum rağmen) kullanarak çok garip bir sorun yaşıyorum.

Raylar başvurum cookie oturum deposu kullanır ve oturumda kullanıcı kimliğini ayarlar çok basit bir giriş var. Eğer user_id oturum ayarlanmış değil eğer, bir oturum açma sayfasına yönlendirir. Bu herhangi bir sorun ile çalışır. Bir WordPress kullanmak çok iyi iş istekleri. Sorun jQuery POST yaptığımda - tarayıcı oturumu tanımlama bilgisi gönderir Tamam (Firebug ve boşaltma isteği ile bunu doğruladı.ama oturum boştur günlüğüne kurabiye), yani oturum {}.

Benim application.js bu yapıyorum:

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

ve buraya örnek yazı:

$.post('/test/1', { _method: 'delete' }, null, 'json');

bu kontrol yöntemi için gereken (_method: sil):

def destroy
  respond_to do |format|
    format.json { render :json => { :destroyed => 'ok' }.to_json }
  end
end

Bakıyorsun günlük ve kullanarak Firebug ben onaylamak doğru tanımlama değerdir gönderilen istek başlığı ne zaman ajax post oluşur, ama öyle görünüyor ki bir noktada Raylar kaybeder bu değer kaybeder ve bu nedenle bu oturum, bu yüzden yönlendirmeleri için oturum açma sayfası ve asla çıkamaz yöntemi.

Aklıma gelen her şeyi bu hata ayıklamaya çalıştım ama bu Raylar bir hata olabileceği fikrine geliyorum. Eğer yardımı olacaksa, Raylar 3.0.4 ve jQuery 1.5 kullanıyorum. Post ve get istekleri düzenli ve istekleri herhangi bir sorun ile çalışma ajax, sakın ajax mesajlar, o çok garip buluyorum.

Bu büyük mutluluk duyacağız gidermeye çalışırken herhangi bir yardım!

Çok teşekkürler
Dave

CEVAP
26 ŞUBAT 2011, CUMARTESİ


Neler olduğunu bulmak başardım olarak kendi sorumu cevaplayacağım. Başkası için yararlı olabilir diye burada göndeririz!

Daha fazla araştırma sonra bu kodu çalıştımgerekiyorbaşlık istek CSRF token ile ayar için, değildi. Bu orijinal kodu:

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

Neler oluyor bu kod Başlığı ayarı değildi, Raylar bir Ajax isteği alıyordum, token oturumu sıfırlama oldu ve MAÇ yoktu. Bu yükseltmek için kullanılan bir ActionController::İnvalidAuthenticityToken hata (sanırım burada yakaladı bu daha önce bir hata oldu kaldırdı... oh iyi), ama beri Raylar 3.0.4 şimdi sessizce sıfırlar oturumu.

Yani başlıktaki belirteç göndermek için, bu (this marvellous blog post çok teşekkürler).

$.ajaxSetup({
  beforeSend: function(xhr) {
    xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
  }
}); 

Ve şimdi olması gerektiği gibi çalışıyor. Bence çok güzel.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • ipsy

    ipsy

    1 EKİM 2012
  • waterfairy17

    waterfairy17

    9 Aralık 2007