Приложение Rails не может проверить токен CSRF только в chrome
у меня есть приложение Rails, работающее в контейнере Docker. Я использую Devise
для проверки подлинности и Rack::Cors
для CORS.
на моей машине, все в порядке. После развертывания я могу GET
страница входа правильно, но когда я заполняю форму входа в систему и отправляю ее, Chrome отвечает пустой страницей и кодом состояния 422 (Unprocessable Entity). В журналах Rails читается:
Can't verify CSRF token authenticity.
Completed 422 Unprocessable Entity in 2ms (ActiveRecord: 0.0ms)
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
интересно, что в Firefox все работает гладко.
Я пробовал все, что я мог найти о Rails, CORS, CSRF, но я не смог найти решение.
Я действительно не знаю, какая информация может быть актуальна здесь, поэтому не стесняйтесь спрашивать подробности в комментариях, я отредактирую вопрос.
1 ответов
для чего это стоит, я оглянулся на свой код, чтобы найти, как я решил проблему.
Я не смог найти чистое решение, поэтому я обошел его, отключив проверку происхождения:
# config/initializers/csrf_workaround.rb
Rails.application.config.action_controller.forgery_protection_origin_check = false
конечно, это вводит уязвимости безопасности, поэтому не забудьте опубликовать свой собственный ответ, если у вас есть более чистый способ заставить это работать и/или иметь реальное объяснение вопроса выше.