J'ai eu le même problème mais avec des pages qui ont été mises en cache. Les pages ont été mises en mémoire tampon avec un jeton d'authenticité périmé et toutes les actions utilisant les méthodes post / put / delete étaient reconnues comme des tentatives de falsification. L'erreur (422 entité impossible à traiter) a été renvoyée à l'utilisateur.
La solution pour Rails 3:
Ajouter:
skip_before_filter :verify_authenticity_token
ou comme "sagivo" l'a souligné dans Rails 4, ajoutez:
skip_before_action :verify_authenticity_token
Sur les pages qui mettent en cache.
Comme @toobulkeh ce n'est pas commenté une vulnérabilité sur :index
, des :show
actions, mais méfiez - vous utiliser ce sur :put
, des :post
actions.
Par exemple:
caches_page :index, :show
skip_before_filter :verify_authenticity_token, :only => [:index, :show]
Référence: http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html
Note ajoutée par barlop- Rails 4.2 obsolète skip_before_filter au profit de skip_before_action https://guides.rubyonrails.org/4_2_release_notes.html "La famille de méthodes * _filter a été supprimée de la documentation. Leur utilisation est déconseillée au profit de l'action * _ famille de méthodes "
Pour Rails 6 (comme "collimarco" l'a souligné), vous pouvez l'utiliser skip_forgery_protection
et il est sûr de l'utiliser pour une API REST qui n'utilise pas de données de session.