Rails / Heroku / Cloudflare: невозможно проверить подлинность токена CSRF после смены домена - PullRequest
1 голос
/ 08 марта 2020

У нас есть приложение Rails 5.2.3, работающее на Devise 4.6.2 и развернутое в Heroku. Приложение использовало домен example.com и все было хорошо. Сегодня нам нужно было изменить этот домен на app.example.com (example.com теперь является сайтом WordPress), и теперь, когда мы пытаемся войти в приложение, мы получаем:

Can't verify CSRF token authenticity
Completed 422 Unprocessable Entity in 19ms
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_controller/metal/request_forgery_protection.rb:211:in `handle_unverified_request'

Одна вещь, которую я Мы поняли, что теперь наше производственное приложение не устанавливает сессионный повар ie. Наше промежуточное приложение (которое использует домен example.herokuapp.com) устанавливает повар ie с именем '_myapp_session' (и он все еще работает нормально), в то время как в нашем производственном приложении нет установленного повара ie. Погугляя по этому поводу, я нашел некоторые упоминания о конфигурации session_store.rb (у нас даже не было этого файла), поэтому я создал файл в config / initializer и попытался установить его в наш домен app.example.com, а также на домен:: все, но, похоже, это ничего не меняет.

Rails.application.config.session_store :cookie_store, key: '_app_myapp_session', domain: :all

Что мне здесь не хватает? Почему изменение домена помешало бы приложению создать сессионный повар ie? О, и мы используем Cloudflare в качестве нашего DNS, и его __cfduid cook ie настроен правильно. Может ли это быть связано?

Ответы [ 2 ]

1 голос
/ 08 марта 2020

Итак, очевидно, это действительно было связано с Cloudflare. Наша запись app.example.com на DNS Cloudflare была «прокси», и как только я установил ее на «Только DNS» и подождал несколько минут, наши сеансовые куки снова начали появляться.

Я только сейчас понял, что Cloudflare имеет свой собственный кеш, поэтому я удалил его и попытаюсь снова использовать параметр «прокси», но если это не сработает, я просто воспользуюсь им. как DNS.

Если у кого-то есть сведения о том, почему настройка прокси в Cloudflare не позволяет устанавливать файлы cookie, сообщите мне. Спасибо!

0 голосов
/ 04 апреля 2020

Вы читали этот пост о кэшированных страницах Cloudflare и CSRF?

Плохо; dr: Если вы кэшируете страницу с формой, защищенной CSRF, вы должны обновить de CSRF, используя Ajax.

https://blog.cloudflare.com/the-curious-case-of-caching-csrf-tokens/

...