2013-06-15 22 views
8

Wołam obtain.auth_token z adresami URL następującobłąd CSRF podczas korzystania rest_framework.authtoken.views.obtain._auth_token

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

wrócę

{ 
detail: "CSRF Failed: CSRF token missing or incorrect." 
} 

Zastanawiam się, dlaczego ta happends jak ja pod wrażenie django-rest-framework był przeważnie CSRF zwolnione

Dzięki

+1

to robi link pomoc? https://groups.google.com/forum/?fromgroups#!topic/django-rest-framework/JCf4MwNtfwM – karthikr

+0

nie jest to szczególnie ten sam problem. – user155813

Odpowiedz

2

Ten widok używa POST. DRF zawsze wymaga CSRF dla uwierzytelnionych sesji POST.

Czułe żądania, takie jak pobranie tokena autoryzacji, powinny wykorzystywać POST właśnie z tego powodu.

1

Miałem dokładnie ten sam problem. Sprawdź, czy masz wylogowanie z przeglądarki.

1

Ja też w to wpadłem. Dodanie odpowiedzi na wypadek, gdyby było to niejasne dla kogokolwiek innego.

  1. Upewnij się, że nie prosisz w kontekście, w którym jesteś już zalogowany, np. z przeglądarki (wyloguj się, spróbuj w trybie incognito lub wyczyść pliki cookie, jeśli jesteś).
  2. Upewnij się, że rzeczywiście używasz punktu końcowego api-token poprawnie. Początkowo próbowałem użyć Basic Auth, zakładając, że ten widok generujący tokeny był chroniony, ale DRF faktycznie oczekuje, że utworzy dane zawierające pola username i password.

Oto przykład pracy użyciu requests:

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

Tylko na przyszłość: "Zauważ, że domyślny widok uzyskiwania_auth_token jawnie używa żądań i odpowiedzi JSON, zamiast używać domyślnych klas renderer i parser w twoich ustawieniach. Jeśli potrzebujesz dostosowanej wersji widoku uzyskiwania_auth_token, możesz to zrobić, zastępując ObtainAuthToken, zobacz klasę i użyj tego w twoim url conf. " na http://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication – MariusSiuram

+0

@MariusSiuram Dzięki za heads up! – Joe

Powiązane problemy