Приложение 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

конечно, это вводит уязвимости безопасности, поэтому не забудьте опубликовать свой собственный ответ, если у вас есть более чистый способ заставить это работать и/или иметь реальное объяснение вопроса выше.