Как обработать 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