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?
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.
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
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.