【问题标题】:Rails - Work Around Authenticity TokenRails - 围绕真实性令牌工作
【发布时间】:2013-07-22 00:20:05
【问题描述】:

我有一个有趣的挑战要解决一个旧的 Rails 2.0.2 应用程序(在更新到 Rails 4 的过程中,但我等不及要解决这个问题了)。问题是这样的:我们即将发布离线内容,最终将用户带到我们的网站上。在从离线到在线的过渡过程中,有一个他们离线填写的表格,但我们希望能够将数据发布到表格的在线版本,而无需用户填写相同的表格两次。我看到的问题是如何处理在线版本中更改的 Authenticity Token。任何人都对我们如何解决这个问题有任何建议。我了解 Authenticity Token 的目的是防止我正在尝试做的事情,但我可以解决它吗,例如,通过某种方式用离线版本的数据预填充在线版本?我认为我不能重现当前工作的真实性令牌/会话对,除非我能以某种方式将相同的 session_id 写入在线表单域的 cookie?或者也许我必须在服务器端解决它?我试图避免仅针对此问题使用自定义代码服务器端... 提前感谢您的任何回复。

【问题讨论】:

    标签: ruby-on-rails token authenticity


    【解决方案1】:

    不是 POST 到在线表单,而是获取在线表单并使用查询字符串预填充字段

    例如,带有名字和姓氏的离线表单在提交时将执行如下所示的 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 标记化表单,而无需填写第二个表单。至少,您的用户必须单击两个提交按钮。您可以出示表格的在线版本作为确认步骤。

    【讨论】:

    • 感谢 gg_s! GET'ing 工作,我添加了 jQuery("#form").submit() 来自动提交表单
    猜你喜欢
    • 2011-03-04
    • 2013-04-21
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 2012-07-29
    • 2018-06-29
    相关资源
    最近更新 更多