Итак, я изучаю Rails (ранее использовал Django и Flask. Новичок в Rails). Я сталкиваюсь с ошибкой токена аутентификации, когда пытаюсь отправить форму в своем приложении Rails. БД была перенесена, и приложение работает как положено. Просто форма выдает ошибку ActionController::InvalidAuthenticityToken и говорит, что request.base_url не соответствует ожидаемому результату (т.е. localhost 127.0.0.1). Это имеет смысл, поскольку я запускаю приложение в Google Cloud Shell (которое размещает его на общедоступной ссылке в формате ‹4-значный номер ПОРТА›-dot--dot-devshell.appspot.com). Кто-нибудь обошел это?
Невозможно отправить форму в моем приложении Rails, работающем в Google Cloud Shell
Ответы (1)
Краткий ответ:
Перейдите в ‹app_dir›/config/environments/development.rb Добавьте config.action_controller.forgery_protection_origin_check = false в файл development.rb
Длинный ответ:
Итак, https://github.com/rails/rails/issues/22965 и https://github.com/rails/rails/issues/22965#issuecomment-172983268 здесь уместны.
Цитируя документы RoR, «config.action_controller.forgery_protection_origin_check» настраивает, следует ли проверять заголовок HTTP Origin относительно источника сайта в качестве дополнительной защиты от CSRF. Проверка включена по умолчанию, и ее можно отключить в среде разработки, добавив ее в ‹app_dir›/config/environments/development.rb (это для Rails 6.0.3.2). Я думаю, что нужно иметь возможность изменить ожидаемый результат request.base_url, чтобы он соответствовал среде разработки. Впрочем, я еще не разобрался с этим. Надеюсь, это поможет всем, кто разрабатывает Rails с помощью Google Cloud Shell.
РЕДАКТИРОВАТЬ: опечатки, ясность