Rails 4 апгрейд, выбрасывающий InvalidAuthenticityToken
Мое приложение только что обновилось до Rails 4, и мы начинаем видеть случайные ошибки InvalidAuthenticityToken. Я провел кучу исследований, но пока не нашел решения. Кто-нибудь знает, что случилось и как это исправить?
Вызвать вещи, которые появились в других подобных SO вопросах, но не относятся ко мне:
Мы называем protect_from_forgery with: :exception
в ApplicationController, но мы делали это и в Rails 3, и не было этой ошибки.
Я подтвердил, что это обычные пользователи, использующие веб-сайт стандартным способом; это не попытки CSRF.
Это не вызовы API, это стандартные представления веб-форм.
Маркер подлинности присутствует в обеих формах (через Rails form_for
или же form_tag
поколения) и в поданном запросе.
У моих сессий не должно быть установлен срок действия, так как я не устанавливаю время истечения, и Rails по умолчанию установлен навсегда, и мои пользователи не часто входят в систему или выходят из нее (поэтому токены с истекшим сроком действия маловероятны, как если бы "была открыта вкладка, зашел на отдельную вкладку, вернулся к открытому тегу и попытался выполнить действие ").
csrf_meta_tag
генерировал те же токены, что и мои формы, и удаление его не помогло.
Мои пользователи подтвердили, что они испытали это как минимум на Firefox, Chrome и Safari.
Весь код доступен на Github.
Возможно связано: если я изменю свое развитие secret_key_base
в секретах.имл и поменяю session_store.rb
файл для использования:Rails.application.config.session_store :cookie_store, key: '_glowfic_constellation_' + Rails.env, domain: 'glowfic.com', tld_length: 2
и перезапустите сервер, я вышел из системы и могу надежно испытать эту ошибку 100% времени при попытке войти в систему.
Редактировать, вызывая еще пару вещей:
Я не могу принудительно очистить все сеансы, потому что я использую хранилища cookie, но я уже сбросил secret_key_base и имя cookie в работе, что (трудно сказать, но я думаю) помогло? Но не решил проблему.
"Возможно, связанный", по-видимому, не связан и связан с доменом "glowfic.com", не поддерживающим "localhost"; если вместо этого я использую домен localhost, я не могу воспроизвести локально.