Rails - Work Around Authenticity Token

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


person Craig    schedule 23.07.2013    source источник


Ответы (1)


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

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

person Substantial    schedule 23.07.2013
comment
спасибо gg_s! GET'ing сработал, и я добавил jQuery (#form) .submit () для автоматической отправки формы - person Craig; 24.07.2013