我在一个旧的Rails 2.0.2应用程序上有一个有趣的挑战要解决(正在更新到Rails 4的过程中,但我不能等待那么长时间来解决这个问题)。问题是:我们即将发布离线内容,最终将用户带到我们的网站上。在从离线到在线的过渡过程中,有一个表单他们离线填写,但我们希望能够将数据发布到表单的在线版本,而无需用户填写相同的表单两次。我看到的问题是如何处理在线版本中更改的真实性令牌。任何人对我们如何解决这个问题有任何建议。我理解真实性令牌的目的是为了防止我试图做的事情,但是我是否可以解决它,例如,通过某种方式使用离线版本中的数据预填充线上版本?我不认为我可以复制当前有效的身份验证令牌/会话对,除非我能以某种方式将相同的session_id写入在线表单的域的cookie?或者也许我必须在服务器端解决这个问题?我试着避免在服务器端定制代码来解决这个问题……提前感谢您的回复。
发布于 2013-07-23 13:07:44
获取在线表单并使用查询字符串预填充域,而不是使用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-tokenized表单,而不必填写第二个表单。至少,您的用户必须单击两个提交按钮。您可以提供表单的在线版本作为确认步骤。
https://stackoverflow.com/questions/17801568
复制相似问题