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

  • Charles Renaud

    Charles Rena

    10 Kasım 2007
  • Whizzpopping

    Whizzpopping

    10 Kasım 2005
  • YAN TV

    YAN TV

    20 EKİM 2011