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 к сожалению нет.