私は、backbone.jsを使用していますが、うまく機能します。しかし、JavaScriptテンプレートとして作成しているフォームにはRails csrf保護トークンがありません。JavaScriptで作成しているテンプレートに追加するにはどうすればよいですか?
レイアウトに_<%= csrf_meta_tag %>
_があり、jsからアクセスできる場合は、$('meta[name="csrf-token"]')
を使用してアクセスできます。
http://eunikorn.blogspot.com/2011/07/working-with-backbonejs-in-harmony-with.html を参照してください。各バックボーンリクエストにcsrfサポートをハックする方法についてのアイデアがあります。
フォーム内でこれを解決した最良の方法:
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
「post」または「delete」を使用するすべてのフォームにcsrfトークンを追加できます。ここにcoffeescriptがあります:
$ ->
for f in $("form")
if f.method == 'post' or f.method == 'delete'
$(f).prepend("<input type='hidden' name='authenticity_token' value='" + token + "'>")
レイアウトに<%= csrf_meta_tags%>があることを確認してください。既に標準の「アプリケーション」レイアウトになっているはずですが、別のレイアウトを使用している場合は追加してください。
Rails 4.2.2については、使用を許可されていません
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
.js.erb
アセットファイルから。
ただし、.js.erb
ファイル内にフォームを作成し、.html.erb
ファイルを含むビューでhidden_field_tag
ヘルパーを使用してトークン要素を生成できます。この要素はフォームの外部で生成されるため、jqueryを使用してこの要素をフォームに追加できます。
事例:SweetAlert(最初のバージョン、バージョンもこの問題を解決したようです)
$('.js-button-apply-offer').click(function(e) {
var urlOffer = $(this).attr('data-url-offer');
var modalParams = {
type: 'warning',
title: 'add file',
text: '<p>Need to add a file before continuing</p>' // This is a hack for Sweet alert, solved in SweetAlert2 Consider upgrade
+"<form action='"+urlOffer+"' id='formCustomCV' method='post' enctype='multipart/form-data' data-remote='true'>"
+ "<input type='file' name='custom_cv' id='fileToUploadAlert' accept='application/pdf'>\n"
+"</form>",
html: true,
showCancelButton: true,
confirmButtonColor: '#DD6B55',
confirmButtonText: 'Send',
cancelButtonText: 'Cancel',
closeOnConfirm: false
}
swal(modalParams,
function(){
var form_token = $('#form_token');
$('#formCustomCV').append(form_token).submit(); //update to submit using ajax
});
<%= button_tag t('offers.offer.apply'),
class: 'center-block btn btn-success js-button-apply-offer',
id: "js-button-apply-offer",
data: {
url_offer: apply_talents_offer_path(@offer),
}
%>
<%= hidden_field_tag :authenticity_token, form_authenticity_token, id: :form_token %>