Как обработать JSON-запрос Invalid Authenticity Token от контроллера приложений в rails

Когда пользователь пытается заполнить форму с помощью сценария или автоматизации, контроллер приложения выдает ошибку

"ActionController::InvalidAuthenticityToken"

Это происходит с действительными настоящими пользователями, когда они заполняют форму, закрывают браузер, снова открывают страницу из истории браузера и отправляют форму.

В этом случае я не хочу отправлять исключение, используя уведомитель об исключении, и я также хочу показать модал с обновленным сообщением запроса.

Поэтому я изменил application_controller как

class ApplicationController < ActionController::Base

  protect_from_forgery with: :exception

  rescue_from ActionController::InvalidAuthenticityToken, with: :handle_csrf_error

  def handle_csrf_error(exception)
    respond_to do |format|
      format.js {
        render 'invalid_requests/error'
      }
      format.html {
        render text: I18n.t('errors.messages.csrf_error')
      }
    end
    ExceptionNotifier.notify_exception(exception)
  end

end

Я хочу, чтобы это работало для всех типов запросов.

Я добавил ответы на запросы html и js

Но не понимаю, как обработать запрос JSON.

PS > json-запрос отправляется из веб-приложения для дополнительной загрузки, а иногда и для исключения, поэтому я хочу, чтобы я справился с этим.

Моя Rails версия 4.2

2 ответа

После того, как вы убедитесь, что ваш запрос правильно делает json запрос, а не js один (проверьте ваш Content-Type заголовок). Добавить format.json на ваш сервер ответ.

respond_to do |format|
  format.json { render json: true }
end

Отключите проверку на токен подлинности в вашем контроллере.

skip_before_action :verify_authenticity_token

См. /questions/5676385/kak-ignorirovat-token-autentifikatsii-dlya-opredelennyih-dejstvij-v-rails

Другие вопросы по тегам