Приложение Rails на AWS Elastic Beanstalk, возвращающее 422 с «Не удается проверить токен csrf» - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть приложение Rails 5.1.4, использующее Puma & nginx, которое какое-то время работало в Elastic Beanstalk (AWS).Недавно я открыл новую среду QA в том же месте и продолжаю получать 422 ошибки для запросов POST на вызовы HTML (вызовы API работают нормально) с сообщением «Не удается проверить токен csrf».Все значения конфигурации одинаковы или эквивалентны.

Я добавил необходимые теги и проверил значения токенов подлинности.Под тегом <head> у меня есть:

<meta name="csrf-param" content="authenticity_token">
<meta name="csrf-token" content="acYjbDMNDXsw+mHN7pM/4XldHungS9kDlkkTT1moNQaf1y7wRhLJhOVb7GTMDieLU4kGc7yWlOch4DlG/z/A8g==">

В моей форме входа в систему у меня есть следующее:

<input type="hidden" name="authenticity_token" value="acYjbDMNDXsw+mHN7pM/4XldHungS9kDlkkTT1moNQaf1y7wRhLJhOVb7GTMDieLU4kGc7yWlOch4DlG/z/A8g==">

И в журналах я получаю параметры:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"acYjbDMNDXsw+mHN7pM/4XldHungS9kDlkkTT1moNQaf1y7wRhLJhOVb7GTMDieLU4kGc7yWlOch4DlG/z/A8g==", "user"=>{"email"=>"someemail@mail.com", "password"=>"[FILTERED]", "remember_me"=>"1"}}

У меня также есть драгоценный камень rack-cors и следующий конфиг:

    config.middleware.insert_before 0, Rack::Cors do
      allow do
        origins '*'
        resource '*', headers: :any, methods: [:get, :post, :options]
      end
    end

Я пытался решить эту проблему уже пару дней, и я совершенно заблудился, как идтиЕсть идеи, что может быть причиной этого?Любая другая информация, которая может быть полезна для выяснения проблемы?

Ответы [ 3 ]

0 голосов
/ 10 февраля 2019

Так что, в случае, если это кому-то поможет в будущем, мне удалось решить проблему, хотя и не полностью.В моем конфиге nginx у меня есть эта строка:

server_name *.myappdomain.com;

myappdomain был моим рабочим доменом.Я пытался войти в систему, используя мой URL-адрес эластичного боба, который был похож на http://myapp-stage.region.elasticbeanstalk.com.Я добавил запись в свой DNS по маршруту 53 к псевдониму stage.myappdomain.com к URL-адресу эластичного бобового стебля, и это сработало.Я подозреваю, что игра немного больше с конфигурацией nginx решит и эту проблему лучше.

0 голосов
/ 08 марта 2019

Другая причина, по которой это может произойти: если nginx подключается к серверу rails с использованием обычного http, по умолчанию nginx не разрешает rails доступ к файлам cookie, если они помечены как безопасные (что и должно быть).Существуют различные способы настройки NGINX для их прохождения - хорошее резюме можно найти на стек-обмене unix & linux

(обратите внимание, что это, вероятно, не единственный сценарий, который может произойтипоэтому проверьте конфигурацию на каждом слое стека, если это возможно)

0 голосов
/ 07 февраля 2019

Мое первое предположение было бы связано с некоторым кэшированием HTML, поскольку токены различаются.Я видел похожее поведение при запуске Varnish с бэкэндом Rails, есть ли у вас что-то вроде Rack :: Cache или прокси-кеш Nginx?

...