Невозможно отправить форму в моем приложении Rails, работающем в Google Cloud Shell

Итак, я изучаю Rails (ранее использовал Django и Flask. Новичок в Rails). Я сталкиваюсь с ошибкой токена аутентификации, когда пытаюсь отправить форму в своем приложении Rails. БД была перенесена, и приложение работает как положено. Просто форма выдает ошибку ActionController::InvalidAuthenticityToken и говорит, что request.base_url не соответствует ожидаемому результату (т.е. localhost 127.0.0.1). Это имеет смысл, поскольку я запускаю приложение в Google Cloud Shell (которое размещает его на общедоступной ссылке в формате ‹4-значный номер ПОРТА›-dot--dot-devshell.appspot.com). Кто-нибудь обошел это?


person foohas    schedule 11.08.2020    source источник
comment
эта страница поможет? stackoverflow.com/questions/3364492/   -  person spike 王建    schedule 11.08.2020


Ответы (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.

РЕДАКТИРОВАТЬ: опечатки, ясность

person foohas    schedule 11.08.2020