web-dev-qa-db-fra.com

Comment exempter la protection CSRF sur direct_to_template

J'ai un flux dans mon Django dans laquelle je redirige l'utilisateur vers un autre service (par exemple Paypal) qui, après un certain traitement, renvoie l'utilisateur sur mon propre serveur. Le point de retour sur mon serveur est une simple page de réussite HTML que je rend en utilisant direct_to_template.

Pour des raisons étranges, l'autre serveur envoie une demande POST et donc l'utilisateur voit une erreur manquante de jeton CSRF car l'autre serveur ne renvoie aucun jeton CSRF.

Comment puis-je exempter une vue direct_to_template des jetons CSRF?

30
sharjeel

Vous pouvez utiliser le csrf_exempt décorateur pour désactiver la protection CSRF pour une vue particulière.

Supposons que votre modèle d'URL soit:

('^my_page/$', direct_to_template, {'template': 'my_page.html'})

Ajoutez l'importation suivante à votre urls.py:

from Django.views.decorators.csrf import csrf_exempt

Modifiez ensuite le modèle d'URL en:

('^my_page/$', csrf_exempt(direct_to_template), {'template': 'my_page.html'})
55
Alasdair

Vous pouvez utiliser @csrf_exempt Décorateur pour exonérer le jeton csrf pour cela que vous devez importer

from Django.views.decorators.csrf import csrf_exempt

puis écrivez @csrf_exempt devant votre vue

cela fonctionnera correctement :)

49
Neeraj Sharma