Сеанс токенов CSRF сбрасывается
Я использую Rails 3.2.3 вместе с active_record_store для моей сессии.
Я понимаю, что токен CSRF в rails хранится в сеансе и не должен сбрасываться, если reset_session не вызван или по какой-либо причине сеанс не уничтожен.
Но в некоторых местах, когда удаленная форма загружается через ajax, она содержит маркер подлинности, отличный от указанного в метатеге на этой странице. Следовательно, вызывая недопустимую ошибку токена и reset_session на отправке эта форма.
def form_authenticity_token
session[:_csrf_token] ||= SecureRandom.base64(32)
end
Я не могу понять, почему для действительной текущей сессии session[:_csrf_token] разрушается и создает новый токен?
1 ответ:
После долгой охоты, наконец-то разобрался в этом вопросе. Я хранил объекты модели непосредственно в сеансе, и хотя даже после использования хранилища активных записей, размер которого ограничен 65 КБ, сеанс был усечен после 4 КБ, это приводило к стиранию токена CRSF и созданию нового. Да! Грубая ошибка... Никогда не храните объекты модели в сеансе, если у вас нет очень веской причины поступать иначе. В любом случае все еще пытаюсь понять, почему даже после того, как есть активная запись хранилище сеансов я не смог сохранить более крупный объект в сеансе.