Django-fr

Forum

#1 03-05-2011 10:11:45

GazaG
Membre
Inscription : 03-05-2011
Messages : 1

Aide : [Dj1.3] CSRF token missing or incorrect.

Bonjour.

J'ai un problème sur l'envoi de données en POST dans un formulaire très simple.
On me renvoi "Forbidden (403) CSRF verification failed. Request aborted." avec les trois reommandantion

The view function uses RequestContext for the template, instead of Context. ==> Fait
In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL. ==> Fait
If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data.==> Fait

Voici mon code :
dans settings.py

MIDDLEWARE_CLASSES = (
    'django.middleware.csrf.CsrfViewMiddleware',
...)

dans views.py

def analyse(request):
    data = {}
    data.update(csrf(request))
    t = loader.get_template('analyse.html')
    c = RequestContext({
        'data' : data,
    })
    return render_to_response("analyse.html", c)

dans index.html

<h1>{{Bonjour}}</h1>
<form action="/Webfiducia/analyse/" method="post">
    {% csrf_token %}
    <input type="text" name="adresse_a_scanner" id="adresse_a_scanner" value="la" />
    <label for="adresse_a_scanner">Adresse a scanner</label><br />
<input type="submit" value="C'est parti !" />
</form>

et dans analyse.html

{% csrf_protect %}
<h1>{{data}}</h1>

Hors ligne

#2 06-05-2011 14:49:29

sardon
Membre
Inscription : 06-05-2011
Messages : 3

Re : Aide : [Dj1.3] CSRF token missing or incorrect.

Bonjour,

essayez d'ajouter dans la section MIDDLEWARE_CLASSES du fichier settings :

'django.middleware.csrf.CsrfResponseMiddleware',

Hors ligne

#3 07-05-2011 21:09:13

daker
Membre
Inscription : 29-03-2011
Messages : 13

Re : Aide : [Dj1.3] CSRF token missing or incorrect.

Exacte pour pouvoir utiliser le crsf il faut que tu fasse appel aux deux Middlewares :

'django.middleware.csrf.CsrfViewMiddleware', 
'django.middleware.csrf.CsrfResponseMiddleware',

Hors ligne

#4 09-05-2011 14:28:11

Bruno Renié
Membre
Inscription : 11-08-2010
Messages : 52

Re : Aide : [Dj1.3] CSRF token missing or incorrect.

CsrfResponseMiddleware est deprecated depuis django 1.2, pour des
raisons de sécurité et puis parce que c'était un hack pas très propre.
Mettez à jour votre code, il n'y en a plus besoin.

En paraphrasant la doc [0] :

- Ajouter 'django.middleware.csrf.CsrfViewMiddleware' dans les
MIDDLEWARE_CLASSES. Pas de CsrfResponseMiddleware.

- Bien ajouter {% csrf_token %} dans ses formulaires

- Utiliser RequestContext ou le context processor à la main.
D'ailleurs tu fais les deux, un seul suffit.

Vu que c'est ce qui a été fait dès le mail initial, le problème est
ailleurs. En l'occurence, j'ai du mal à voir le lien entre les deux
templates, "index.html" et "analyse.html", ni ce que {% csrf_protect
%} vient faire dans un template.

Regarde dans la vue qui affiche index.html, elle n'utilise
probablement pas RequestContext ou le context processor. Afficher les
sources peut aider, on voit un <input> à la place du {% csrf_token %}.

[0] http://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#how-to-use-it

On Fri, May 6, 2011 at 3:49 PM, sardon <ml _AT_ dadaprod.org> wrote:
> Bonjour,
>
> essayez d'ajouter dans la section MIDDLEWARE_CLASSES du fichier settings :
>
>

>    'django.middleware.csrf.CsrfResponseMiddleware',
>

> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

Pied de page des forums