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