Сеанс токена 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 и генерированию нового. Да уж! Ошибка... Никогда не сохраняйте объекты модели в сеансе, если у вас нет веских причин поступить иначе. В любом случае, все еще пытаюсь выяснить, почему даже после того, как у меня было активное хранилище сеансов записи, я не смог сохранить более крупный объект в сеансе.

Другие вопросы по тегам