Comment puis-je désactiver de Django reinhardt, de la protection csrf dans certains cas seulement?
Je suis en train d'écrire un site en Django où l'Url de l'API sont les mêmes que l'utilisateur face à des Url. Mais j'ai de la difficulté avec les pages qui utilisent des requêtes POST et la protection CSRF. Par exemple, si j'ai une page /foo/add je veux être en mesure d'envoyer des requêtes POST de deux manières:
- D'un utilisateur final (authentifiés à l'aide d'un cookie de session) la soumission d'un formulaire. Cela nécessite une protection CSRF.
- Comme une API client (authentifiés à l'aide d'une requête HTTP en-tête). Ceci ne fonctionnera pas si la protection CSRF est activé.
J'ai trouvé divers moyens de désactivation CSRF, comme @csrf_exempt, mais tout le désactiver pour l'ensemble de la vue. Est-il possible de l'activer/désactiver les plus fines au niveau? Ou suis-je tout simplement va falloir mettre en place par la protection CSRF à partir de zéro?
- Avez-vous vérifié protection csrf docs?
- J'avais lu des bouts de, mais clairement il n'a pas lu tous les Scénarios. Merci!
Vous devez vous connecter pour publier un commentaire.
Il y a une section de Django Protection CSRF documentation intitulée Vue des besoins de protection d'un chemin qui décrit une solution. L'idée est d'utiliser
@csrf_exempt
sur l'ensemble de la vue, mais lorsque l'API client d'en-tête n'est pas présent ou non valide, puis d'appeler une fonctionannoté avec
@csrf_protect
.Modifier
urls.py
Si vous gérez vos itinéraires en
urls.py
, vous pouvez envelopper votre choix d'itinéraires aveccsrf_exempt()
de les exclure de la CSRF vérification middleware.par exemple,
Sinon, un Décorateur
Certains peuvent trouver de l'utilisation de la
@csrf_exempt
décorateur mieux adaptés à leurs besoinspar exemple,