184 votes

ActionController::InvalidAuthenticityToken

Aujourd'hui, mon application rails sur un serveur distant soudainement cesser de travailler. Toutes les erreurs sont dans la forme

Processing UsersController#update (for **ip** at 2010-07-29 10:52:27) [PUT]
  Parameters: {"commit"=>"Update", "action"=>"update", "_method"=>"put", "authenticity_token"=>"ysiDvO5s7qhJQrnlSR2+f8jF1gxdB7T9I2ydxpRlSSk=", **more parameters**}

ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):

Cela se produit pour tous les non-requête get et, comme vous le voyez, authenticity_token est là.

Avez-vous vu quelque chose comme ça? Merci!

PS Sur le web j'ai trouvé une suggestion pour supprimer 'tmp', dossier, n'a pas aider.

233voto

Jeznet Points 2000

J'ai eu le même problème mais avec des pages qui ont été page en cache. Pages s'est tamponnée avec un état d'authenticité jeton et toutes les actions à l'aide de méthodes post/put/delete où reconnus comme les tentatives de falsification. Erreur (422 Unprocessable Entité) a été renvoyée à l'utilisateur.

La solution:
Ajouter:

 skip_before_filter :verify_authenticity_token  

ou comme "sagivo", a souligné dans les Rails 4 ajouter:

 skip_before_action :verify_authenticity_token

Sur les pages qui n'mise en cache.
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

86voto

James McMahon Points 14356

Pour moi la cause de ce problème sous Rails 4 a été un manque,

<%= csrf_meta_tags %>

Dans mon application principale de mise en page. J'avais accidentellement supprimé lorsque j'ai réécrit ma mise en page.

Si ce n'est pas dans la page principale, vous en aurez besoin dans n'importe quelle page que vous voulez un jeton CSRF.

32voto

Winfield Points 10838

L'authenticité jeton est une valeur aléatoire générée dans votre point de vue à prouver une demande est envoyée à partir d'un formulaire sur votre site, et non ailleurs. Cela protège contre les attaques CSRF:

http://en.wikipedia.org/wiki/Cross-site_request_forgery

Vérifier pour voir qui que client/IP est, on dirait qu'ils sont à l'aide de votre site sans avoir à charger votre point de vue.

Si vous avez besoin de déboguer en outre, cette question est un bon endroit pour commencer: http://stackoverflow.com/questions/941594/understand-rails-authenticity-token

Édité à expliquer: Cela signifie qu'ils sont appel à l'action pour le traitement de votre formulaire de soumission sans jamais le rendu de votre formulaire sur votre site web. Ce pourrait être malveillant (dire l'affichage de commentaires de spam) ou elle pourrait indiquer un client essaie d'utiliser votre API de service web directement. Vous êtes le seul qui peut répondre que par la nature de votre produit et de l'analyse de vos demandes.

23voto

amjad Points 472

trop tard pour répondre, mais j'ai trouvé la solution.

Lorsque vous définissez vous propre code html du formulaire, puis vous manquez jeton d'authentification chaîne de caractères qui doit être envoyé au contrôleur pour des raisons de sécurité. Mais lorsque vous utilisez les rails de la forme de l'aide pour générer un formulaire, vous obtenez quelque chose comme suivant

    <form accept-charset="UTF-8" action="/login/signin" method="post"><div style="display:none"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="x37DrAAwyIIb7s+w2+AdoCR8cAJIpQhIetKRrPgG5VA=" ...

Donc la solution à ce problème est d'ajouter authenticity_token champ ou de l'utilisation des rails de forme aides, plutôt que de les enlever , la rétrogradation ou la mise à niveau des rails.

7voto

Michael Koper Points 3507

J'ai eu ce problème avec javascript appels. Je fixe qu'avec un peu exigeant jquery_ujs en application.js fichier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X