Comment rendre CSRF input dans twig?

je sais qu'il y a la façon habituelle de rendre les entrées cachées des tokens CSRF avec form_rest , mais y a-t-il une façon de rendre juste les entrées CSRF elles-mêmes? J'ai remplacé {% block field_widget %} dans le thème pour rendre un morceau de texte supplémentaire. Mais comme le jeton CSRF est aussi rendu dans le champ input et que j'ai un morceau de texte dont je n'ai pas besoin à côté d'un champ caché. Donc, je voudrais rendre séparément avec un argument qui permet de ne pas rendre ce texte.

40
demandé sur Ondrej Slinták 2011-09-19 23:45:21

5 réponses

vous pouvez le faire avec {{ form_widget(formView._token) }}

86
répondu Henrik Bjørnskov 2011-09-20 18:16:32

si vous avez formView objet, vous pouvez le rendre en utilisant la fonction de brindille:

{{ form_widget(formView._token) }} 

si vous ne l'avez pas fait - vous pouvez rendre token sans utiliser form object directement:

<input type="hidden" name="token" value="{{ csrf_token('some-name') }}">

Travaille dans Symfony 2.x et 3.x

pour valider le token, vous pouvez utiliser le code suivant dans votre controller (Symfony 3.x):

$submittedToken = $request->request->get('token');

if ($this->isCsrfTokenValid('some-name', $submittedToken)) {
    // ... do something,
}
48
répondu pliashkou 2018-08-14 08:33:45

ou vous pouvez simplement utiliser ceci:

{{ form_row(form._token) }}

cela générera automatiquement les éléments HTML cachés appropriés, c'est-à-dire la structure HTML appropriée et les noms de champ, selon le type de formulaire que vous utilisez.

17
répondu Anass 2014-11-26 15:51:24

J'avais besoin de rendre l'entrée csrf à L'intérieur de la brindille pour pouvoir l'utiliser pour les opérations Supprimer . Utiliser {{ csrf_token('authenticate') }} comme la réponse de @YuryPliashkou me donne le mauvais token (qui n'est valide que pour les logins!)

ce qui a fonctionné pour moi était ce {{ csrf_token('form') }} qui me donne le bon jeton csrf que je passerais ensuite à mon contrôleur via ajax.

<span id="csrf_token" data-token="{{ csrf_token('form') }}"></span> 
// my ajax call
$.ajax({
    url: localhost/admin/product/4545,   // 4545->id of the item to be deleted
    type: 'POST',
    data: {
        "_method": "DELETE",
        "form[_token]": $("#csrf_token").data("token")   // passed csrf token here
    },
    success: function(result) {
        // Do something 
   }
});

a vérifié son travail sur Symfony 3.x.

référence

4
répondu Niket Pathak 2017-05-23 11:47:30

n'a pas trouvé la solution travaillée pour moi, trouvé et testé et travaillé pour ma valeur Simfony3= "{{tooken }} "dans l'exemple

     <form name="form" method="post" action="{{ path('blog_show', { 'id': blog.id }) }}">
       <input name="_method" value="DELETE" type="hidden">
       <input class="btn btn-danger" value="Delete" type="submit">
       <input id="form__token" name="form[_token]" value="{{ _token }}" type="hidden">
    </form>

pour en savoir plus sur scrf, Cliquez ici: création manuelle de formulaires en Symfony2, mais utilisez quand même son CSRF et isValid() de manière fonctionnelle

1
répondu Vladimir Ch 2017-05-23 12:18:24