web-dev-qa-db-fra.com

Rails 4. Comment ajouter authenticity_token aux formulaires rendus via partial?

Sur mon Rails, sur toutes les pages, dans la section head, il y a ces 2 balises META:

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

Sur les formulaires non rendus à l'aide d'un partiel, il y a un champ caché authenticity_token

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

Mais ce champ manque si je charge simplement le formulaire comme ceci:

<%= render 'shared/comment_form' %>

Est-ce un comportement attendu? Dois-je ajouter manuellement un authenticity_token Et si oui, comment puis-je le valider?

Modifier:

shared/_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 %>

De plus, l'ajout de <input type="hidden" name="authenticity_token" id="authenticity_token" value="ANYTHING" /> À ce formulaire parvient toujours à publier les informations et à créer un nouvel enregistrement ...

17
Catalin

Dans votre cas, nous avons deux façons de procéder:

  1. Ajouter authenticity_token: true dans les options de formulaire

  2. Ajoutez manuellement le champ authenticity_token au formulaire, comme ceci:

<%= hidden_field_tag :authenticity_token, form_authenticity_token -%>

43
Thieu Nguyen

Ok, il semble donc qu'il s'agisse de formulaires distants et non de formulaires chargés via un partiel:

La valeur par défaut de config.action_view.embed_authenticity_token_in_remote_forms a été remplacée par false. Cette modification rompt les formulaires distants qui doivent également fonctionner sans JavaScript, donc si vous avez besoin d'un tel comportement, vous pouvez le définir sur true ou passer explicitement authenticity_token: true dans les options du formulaire.

Réponse trouvée ici: https://github.com/Rails/rails/issues/10608

6
Catalin