10 votes

Erreur CSRF lors de l'utilisation de rest_framework.authtoken.views.obtain_auth_token

Je suis en train d'appeler obtain.auth_token à partir des URL comme suit

url(r'^api-token/','rest_framework.authtoken.views.obtain_auth_token')

Je reçois en retour

{
détail: "Échec CSRF : jeton CSRF manquant ou incorrect."
}

Je me demande pourquoi cela se produit car j'avais l'impression que django-rest-framework était habituellement exempté du CSRF

Merci

2voto

noa Points 8851

Cette vue utilise un POST. DRF nécessite toujours CSRF pour les POST authentifiés par session.

Les requêtes sensibles comme l'obtention d'un jeton d'authentification devraient utiliser POST pour cette raison.

2voto

Ryu_hayabusa Points 352

J'ai eu exactement le même problème. Vérifiez si vous avez bien déconnecté du navigateur.

2voto

Joe Points 2650

Je viens de rencontrer ce problème aussi. J'ajoute une réponse au cas où cela ne serait pas clair pour quelqu'un d'autre.

  1. Assurez-vous de ne pas effectuer la demande dans un contexte où vous êtes déjà connecté, par exemple depuis le navigateur (déconnectez-vous, essayez en mode incognito, ou effacez vos cookies si vous l'êtes).
  2. Assurez-vous d'utiliser correctement le point de terminaison api-token. J'ai d'abord essayé d'utiliser l'authentification de base, en supposant que cette vue générant un token était protégée, mais DRF attend en fait des données de formulaire contenant les champs username et password.

Voici un exemple fonctionnel en utilisant requests:

r = requests.post('http://example.com/api-token/'), data={
    'username': username,
    'password': password,
})
token = r.json()['token']

0voto

Javier Gutierrez Points 214

En conformité avec la documentation http://www.django-rest-framework.org/topics/ajax-csrf-cors/, vous devez mettre en œuvre ajax-csrf tel qu'expliqué dans https://docs.djangoproject.com/en/dev/ref/csrf/#ajax

... si vous utilisez AngularJS, vous pouvez le vérifier Django csrf token + Angularjs

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X