2011-02-22 28 views
6

Kullanıcı oturum açtıktan ve kullanıcı adı doğrulandıktan ve [: user_name] oturumunda kaydedildikten sonra, yöntem = "post" (standart html kullanarak) formunu gönderirken tüm oturum verileri temizlenir ve kullanıcı giriş sayfasına yönlendirilir . Bu yöntem, almak için ayarlanmışsa olmaz. Ne oluyorYayınlama yöntemi, raylar oturum verilerimi neden temizliyor?

<div style="margin: 0pt; padding: 0pt; display: inline;"> 
<input type="hidden" value="✓" name="utf8"> 
<input type="hidden" value="a_bunch_of_gibberish" name="authenticity_token"> 
</div> 

: Ben raylar bu ek çizgiler oluşturur "form_tag" kullandığınızda

Mesaj çalışıyor?

+1

olduğunu. Denetleyici kodunuzu – fl00r

cevap

9

Rails 3.0.4 kullanıyor musunuz? CSRF fix ile ilgili olabilir gibi görünüyor.

Gereksinimlerinize özel bir düzeltmeye ihtiyacınız varsa, denetleyicinizde #handle_unverified_request öğesinin üzerine yazabilirsiniz. Bakınız https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/metal/request_forgery_protection.rb. Bu sorunun nerede olduğu OmniAuth ve OpenId ile

Here's an example. (Bkz. 'CSRF Koruması Rails 3.0.4')

+0

kullanmalıyım 3.0.4 kullanıyorum ve "CSRF Koruma Baypasında Ruby on Rails" makalesine baktıktan sonra doğru olduğunuzu düşünüyorum: 'Bu düzeltmede iki önemli değişiklik var: CSRF koruması başarısız olduğunda davranış değişti ve jeton GET isteklerinin tümü için gerekli olacak. Bu düzeltme ekini uyguladıktan sonra CSRF istekleri artık HTTP 500 hatası üretmeyecek, bunun yerine oturum sıfırlanacaktır. ' –

+0

Sahteciliğin nasıl üstesinden geleceğine dair basit bir açıklama: http://stackoverflow.com/a/1730421/216717 –

6

Kendi html formunuzu oluşturuyorsanız, bu sorun da oluşabilir. Eğer bilmeden yönlendiriliyorum ediyorsanız

neden, bunun nedeni ApplicationController içinde "protect_from_forgery"

formunuz, yazılan bunun için aşağıdaki kodu eklemek için izin vermek amacıyla (ya form_tag kullanın aşağıda açıklama) ait bulunuyor : form_tag sizin için gizli bir alan oluşturur çünkü farklı tedbirlerin alınmasını çünkü "form_tag" çalışır

<form ... > 
... 
<%= hidden_field_tag "authenticity_token", form_authenticity_token %> 
... 
</form> 

nedeni) =

+1

Teşekkürler, bu benim sorunumu çözdü :) – Dave

+0

@Dave sevindim! :-) – Abdo

İlgili konular