У меня есть интересная задача, которую нужно решить в старом приложении Rails 2.0.2 (в процессе обновления до Rails 4, но я не могу ждать так долго, чтобы решить эту проблему). Проблема в следующем: мы собираемся распространять офлайн-контент, который в конечном итоге предназначен для подключения пользователя к нашему веб-сайту. При переходе от офлайн к онлайн есть форма, которую они заполняют офлайн, но мы хотим иметь возможность публиковать данные в онлайн-версии формы без того, чтобы пользователю приходилось заполнять одну и ту же форму дважды. Проблема, которую я вижу, заключается в том, как бороться с токеном подлинности, который изменяется в онлайн-версии. У кого-нибудь есть предложения о том, как мы можем это обойти. Я понимаю, что цель токена аутентичности - предотвратить то, что я пытаюсь сделать, но могу ли я обойти это, например, предварительно заполнив онлайн-версию данными из офлайн-версии? Я не думаю, что смогу воспроизвести работающую в настоящее время пару токен аутентификации / сеанс, если я не смогу каким-то образом записать тот же идентификатор session_id в файл cookie домена онлайн-формы? Или, может быть, мне нужно решить это на стороне сервера? Я пытался избежать использования пользовательского кода на стороне сервера только для этой проблемы ... Заранее благодарим за любые ответы.
Rails - Work Around Authenticity Token
Ответы (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
спасибо gg_s! GET'ing сработал, и я добавил jQuery (#form) .submit () для автоматической отправки формы
- person Craig; 24.07.2013