Eu tive o mesmo problema, mas com páginas em cache. As páginas foram armazenadas em buffer com um token de autenticidade antigo e todas as ações usando os métodos post / put / delete foram reconhecidas como tentativas de falsificação. O erro (422 entidade não processável) foi retornado ao usuário.
A solução para o Rails 3:
Adicione:
skip_before_filter :verify_authenticity_token
ou como "sagivo" apontado no Rails 4, adicione:
skip_before_action :verify_authenticity_token
Nas páginas que fazem cache.
Como o @toobulkeh comentou, isso não é uma vulnerabilidade :index
, :show
ações, mas tenha cuidado ao usar isso :put
, :post
ações.
Por exemplo:
caches_page :index, :show
skip_before_filter :verify_authenticity_token, :only => [:index, :show]
Referência: http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html
Nota adicionada por barlop- O Rails 4.2 descontinuou o skip_before_filter em favor do skip_before_action https://guides.rubyonrails.org/4_2_release_notes.html "A família de métodos * _filter foi removida da documentação. Seu uso é desencorajado em favor da * _action família de métodos "
Para o Rails 6 (como "collimarco" apontou), você pode usar skip_forgery_protection
e que é seguro usá-lo para uma API REST que não usa dados da sessão.