2016-03-15 17 views
6

Mở ứng dụng ray của tôi, trên tất cả các trang, trong phần đầu có những 2 thẻ meta:Rails 4. Cách thêm authenticity_token vào biểu mẫu được hiển thị qua từng phần?

<meta name="csrf-param" content="authenticity_token" /> 
<meta name="csrf-token" content="027GUZBeEkmv..." /> 

Mở hình thức không trả lại bằng cách sử dụng một phần có được một authenticity_token lĩnh vực ẩn

<input type="hidden" name="authenticity_token" value="D5TddQruJppDD3..." /> 

Nhưng trường này bị lỡ nếu tôi chỉ cần tải biểu mẫu như sau:

<%= render 'shared/comment_form' %> 

Hành vi này có được mong đợi không? Tôi có nên thêm một số authenticity_token theo cách thủ công không và nếu có thì làm cách nào để xác thực?

Edit:

chia sẻ/_comment_form.html.erb

<%= form_for([@post, @comment], :html => { :onsubmit => "validateCommentForm(event)" }, remote:true) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <div class="field"> 
     <%= f.text_area :content, placeholder: "Add to the article. Make it be more" %> 
    </div> 

    <%= f.submit "Save", class: "btn btn-info" %> 
<% end %> 

Ngoài ra, thêm <input type="hidden" name="authenticity_token" id="authenticity_token" value="ANYTHING" /> mẫu mà vẫn quản lý để gửi các thông tin và tạo ra một kỷ lục mới ...

+0

Bạn có thể gửi người dân địa phương với một phần khi được gọi như vậy: <% = render'shared/comment_form,: người dân địa phương => {: thẻ => 'kasdlfjasldfj'}% – bkunzi01

+0

'cái form_for' xây dựng hoặc 'form_tag 'thường chăm sóc việc thêm một trường ẩn với mã thông báo xác thực, bạn có thể hiển thị cho chúng tôi biểu mẫu 'shared/comment_form' không? – sled

Trả lời

25

Trong trường hợp của bạn, chúng ta có hai cách để thực hiện:

  1. Thêm authenticity_token: true trong các tùy chọn hình thức

  2. thủ thêm lĩnh vực authenticity_token vào hình thức, như thế này :

<%= hidden_field_tag :authenticity_token, form_authenticity_token -%>

+0

Vâng đây là giải pháp, nhưng cũng giải thích về những gì đang xảy ra là cần thiết để hiểu tại sao điều này xảy ra và tôi đã thêm rằng trong một câu trả lời dưới đây – Catalin

2

Ok, do đó, có vẻ như đó là về các biểu mẫu từ xa và không phải biểu mẫu được tải qua một phần:

Đã thay đổi giá trị mặc định cho config.action_view.embed_authenticity_token_in_remote_forms thành false. Sự thay đổi này phá vỡ các biểu mẫu từ xa cần phải hoạt động mà không có JavaScript, vì vậy nếu bạn cần hành vi như vậy, bạn có thể đặt nó thành true hoặc một cách rõ ràng thông qua authenticity_token: true trong các tùy chọn biểu mẫu.

Tìm thấy câu trả lời ở đây: https://github.com/rails/rails/issues/10608

Các vấn đề liên quan