web-dev-qa-db-fra.com

verify_authenticity_token n'a pas été défini

Ruby version 2.2.4, Rails version 5.0.0.1.

Je suis coincé dans une partie d'un tutoriel où vous testez la connexion avec curl. Je reçois une erreur

ArgumentError (Avant le rappel de process_action: verify_authenticity_token n'a pas été défini).

J'ai utilisé ce code dans sessions_controller:

skip_before_action :verify_authenticity_token, :if => Proc.new { |c| c.request.format == 'application/json' }

Quelqu'un connaît-il la réponse?

21
Peter

Vérifiez si votre ApplicationController a un appel à protect_from_forgery comme suit:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
end

Appelant essentiellement protect_from_forgery ajoute verify_authenticity_token à la before_filter liste, que vous pouvez ignorer dans les autres contrôleurs.

Faire référence à protect_from_forgery documentation pour plus d'informations.

20
Dharam Gollapudi

Après la mise à niveau vers Rails 5, j'ai rencontré cette erreur. J'ai découvert que si skip_before_action est appelé plusieurs fois avec le même nom de méthode, cette exception sera levée.

Mon correctif a été d'ajouter le paramètre raise: false, pour la deuxième fois skip_before_filter a été appelé.

Il ressemblerait donc à ceci dans le contrôleur d'application:

skip_before_action :your_method_name, raise: false
9
BananaNeil

Après la mise à niveau vers Rails 5 et déploiement sur Heroku, j'ai rencontré cette erreur. Je n'ai pas pu la reproduire en cours de développement.

Dans le API docs l'exemple est donné

class ApplicationController < ActionController::Base
  protect_from_forgery unless: -> { request.format.json? }
end

Pour moi, ajouter le unless: -> { request.format.json? } comme ci-dessus a corrigé ma bombe à pile. raise: false malheureusement pas.

0
0xtobit