Я работаю над переносом большого пакета веб-сайтов с Ruby 1.9 на Ruby 2.3, и я почти закончил.У меня Rails почти полностью перешел с 3.2 на 4.2, но я столкнулся с одной загадкой, которую я не могу понять, и этот проект - мой первый опыт работы с Ruby или Rails, поэтому я выбрал жаргон какЯ пойду.
Когда я указываю свой браузер на свой сервер разработки, все мои запросы GET выполняются успешно (200), но все мои запросы POST терпят неудачу (500).После некоторых исследований я узнал о встроенной в Rails защите CSRF и смог определить, что пакет, с которым я работаю, имеет эту защиту, когда он использует Rails 3.2.
С Rails 4.2на месте защита, по-видимому, препятствует выполнению любых запросов POST.После более подробного изучения я обнаружил, что Rails 4 шифрует куки-файлы аутентификации перед отправкой их на веб-сервер, а Rails 3 - нет, и что рекомендуется использовать куки-файлы Rails 3, пока все ваши пользователи не перейдут на Rails 4. Язакомментировал определение secret_key_base, которое я создал как часть миграции, и я очистил кеш браузера, так что, насколько я понимаю, теперь я должен использовать незашифрованный cookie Rails 3.
Однако мои запросы POSTдо сих пор бросают 500 с.Я не могу поделиться большим количеством кода, но я сослался на это официальное руководство , и у меня есть эта строка в контроллере приложения:
protect_from_forgery with: :exception
Я также подтвердил, что если я буду комментироватьЗащитите и используйте:
skip_before_action :verify_authenticity_token
, тогда POST-запросы будут успешными (они просто очень небезопасны).
Большая часть того, что я прочитал, указывает на то, что эта функция зависит отСтрока protect_from_forgery, которую я показал выше, и все.
Мне кажется, что эти запросы не могут быть выполнены успешно, и мне интересно, если это просто еще один уровень знаний, который я еще не получил.Буду очень признателен за любую помощь.