为什么在我的表单中添加文件字段会导致“无法验证CSRF令牌...”

时间:2018-11-26 21:08:43

标签: ruby-on-rails ruby devise csrf crud

(可能)我有一个简单的问题,似乎无法解决问题。

我有一个简单的表单可以在Rails应用程序中编辑tenant对象。它按预期工作。

但是,当我在表单中添加<%= f.file_field :logo %>行时,出现Can't verify CSRF token authenticity.错误。

我的问题: 为什么添加file_field会导致此CSRF错误?

相关表格:

....
<%= form_for(tenant,:html=>{:id=>"your_form_id",:multipart => true,:remote=>true}) do |f| %>
  <%= render 'errors/form_errors', object: @tenant %>

  <div id="login-form">
    <div class="field">
      <%= f.text_field :name, placeholder: "name" %>
    </div>
    </br>
    <div class="field">
      <%= f.email_field :email, placeholder: "email" %>
    </div>
    </br>
    <div class="field">
      <%= f.phone_field :phone, id: "phoneNumber", placeholder: "(XXX) XXX-XXXX", onkeypress:"return numberPressed(event);" %>
    </div>
    </br>

    <div class="field">
      <%= f.file_field :logo %> //WORKS FINE WITHOUT THIS FIELD!
    </div>

    <div class="actions">
      <%= f.submit id: "login-button", class: "btn-outline-primary", value: "Save",'data-disable-with':"Wait..." %>
    </div>
  </div>

<% end %>
....

此外,这是显示表单的代码。不确定是否有任何相关性。

这是文件中显示我的表单的代码:edit.js.erb

closeLightbox();
$("body").prepend('<%= escape_javascript(render 'edit', tenant: @tenant) %>');

编辑:尽管我真的不明白为什么有必要,但我已经找到了解决方案。请参阅下面的答案。

1 个答案:

答案 0 :(得分:0)

我在另一个线程中发现了这个,它解决了我的问题:

我在表单中添加了以下内容:

<%= token_tag(nil) %>