Rails - жетон обхода подлинности

У меня есть интересная задача, которую нужно решить в старом приложении Rails 2.0.2 (в процессе обновления до Rails 4, но я не могу ждать так долго, чтобы решить эту проблему). Проблема заключается в следующем: мы собираемся распространять офлайн-контент, который должен в конечном итоге привлечь пользователя на наш веб-сайт. При переходе из автономного режима в онлайн-режим существует форма, которую они заполняют в автономном режиме, но мы хотим, чтобы мы могли публиковать данные в онлайн-версии формы, при этом пользователю не нужно заполнять одну и ту же форму дважды. Проблема, которую я вижу, заключается в том, как обращаться с токеном подлинности, который изменяется в онлайн-версии. У любого есть какие-либо предложения о том, как мы можем обойти это. Я понимаю, что цель маркера подлинности состоит в том, чтобы предотвратить то, что я пытаюсь сделать, но могу ли я обойти его, например, каким-то образом предварительно заполнив онлайн-версию данными из офлайн-версии? Я не думаю, что смогу воспроизвести текущую пару токен / сеанс аутентификации, если не смогу каким-то образом записать тот же идентификатор session_id в файл cookie домена онлайн-формы? Или, может быть, мне придется заняться этим на стороне сервера? Я пытался избежать использования пользовательского кода на стороне сервера только для этой проблемы... Заранее спасибо за любые ответы.

1 ответ

Решение

Вместо размещения в онлайн-форме, ПОЛУЧИТЕ онлайн-форму и заполните поля, используя строку запроса.

Например, автономная форма с именами и фамилиями при отправке будет выполнять запрос GET следующим образом:

mysite.com/offline_form/new?first_name=Dick&last_name=Steele  

Этот URL будет отображать в реальном времени new заполнить действительным токеном CSRF. Используйте строку запроса для заполнения полей ввода. Строка запроса может быть доступна через params[],

form_for :online do |f|
  f.text_field :first_name, value: params[:first_name]
  f.text_field :last_name, value: params[:last_name]
  # ...
end  

Таким образом, ваши пользователи могут отправить действующую CSRF-токенизированную форму без необходимости заполнения второй формы. Как минимум, ваши пользователи должны будут нажать две кнопки отправки. Вы можете представить онлайн-версию формы в качестве шага подтверждения.

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