verify_authenticity_token не определен
Ruby версии 2.2.4, Rails версии 5.0.0.1.
Я застрял в части учебника, где вы проверяете логин с curl
. Я получаю сообщение об ошибке
ArgumentError (до обратного вызова process_action: verify_authenticity_token не определено).
Я использовал этот код в session_controller:
skip_before_action :verify_authenticity_token, :if => Proc.new { |c| c.request.format == 'application/json' }
Кто-нибудь знает ответ?
Ответы
Ответ 1
Проверьте, имеет ли ваш ApplicationController
вызов для protect_from_forgery
следующим образом:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
end
По сути вызов protect_from_forgery
добавляет verify_authenticity_token
в список before_filter
, который вы можете пропустить в других контроллерах.
Для получения дополнительной информации обратитесь к документации по protect_from_forgery
.
Ответ 2
После обновления до Rails 5 я столкнулся с этой ошибкой. Я обнаружил, что если skip_before_action
вызывается несколько раз с одним и тем же именем метода, это исключение будет вызвано.
Я решил добавить параметр raise: false
во второй раз, когда был вызван skip_before_filter
.
Так это будет выглядеть в Контроллере приложений:
skip_before_action :your_method_name, raise: false
Ответ 3
После обновления до Rails 5 и развертывания до Heroku я столкнулся с этой ошибкой. Я не мог воспроизвести его в процессе разработки.
В API документах приведен пример
class ApplicationController < ActionController::Base
protect_from_forgery unless: -> { request.format.json? }
end
Для меня добавление unless: -> { request.format.json? }
, как описано выше, исправило мою стековую бомбу. raise: false
к сожалению нет.