2016-03-09 22 views
7

私はDjango Rest Frameworkで作成したREST APIにVue.jsを使っていくつかのPOSTメソッドを実行しようとしています。問題は、投稿時にCSRF Failed: CSRF token missing or incorrect.エラーが発生しています。しかし、私はcsrfのクッキーを見ることができ、それはヘッダーに追加されています。Django Rest Framework、CSRF、Vue.js

REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': (
     'rest_framework.permissions.IsAuthenticated', 
     'rest_framework.permissions.DjangoModelPermissions' 
    ), 
    'DEFAULT_AUTHENTICATION_CLASSES': (
     'rest_framework.authentication.SessionAuthentication', 
     'rest_framework.authentication.BasicAuthentication' 
    ) 
} 

はここに私のVue.jsの設定です:ここで

は私の設定です

var csrftoken = Cookies.get('csrftoken'); 
Vue.http.headers.common['HTTP_X_CSRFTOKEN'] = csrftoken; 

そして、ここに送られたヘッダの関連部分です:あなたのよう

Cookie:djdt=hide; tabstyle=raw-tab; sessionid=1gl533mrneudxw3l9l2vg0ja1yowwmeo; csrftoken=dN85bhztB1oVRov87BsUrWTM29Ff9sjn 
Host:127.0.0.1:8000 
HTTP_X_CSRFTOKEN:dN85bhztB1oVRov87BsUrWTM29Ff9sjn 
Origin:http://127.0.0.1:8000 
Referer:http://127.0.0.1:8000/agencies/6/add-profiles/ 

Cookie.csrfとHTTP_X_CSRFTOKENヘッダーが一致することがわかります

私は本当に困っています。助言がありますか?

+1

'CSRF_HEADER_NAME'設定は何を使用していますか? djangoは従来どおり、 'HTTP_X_CSRFTOKEN'は' X-CSRFTOKEN'を送信する必要があることを知っています。https://docs.djangoproject.com/en/1.9/ref/settings/#csrf-header- – Nevertheless

+1

あなたのアプリは同じドメインにありますか?またはCORSを使用していますか? –

+0

Yerko Palmaが正しいです、それは同じ発信元リクエストポリシーまたは 'CSRF_COOKIE_HTTPONLY'設定の問題かもしれません。 – Nevertheless

答えて

8

私は質問を閉じるための答えとしてこれを投稿しています。

問題は、要求に応じて送信されたCSRFヘッダー名が間違っていたためです。ドキュメントによれば:request.METAにおける他のHTTPヘッダーと同様

、ヘッダ名はHTTP_、 大文字にすべての文字を変換下線で任意ハイフンを置き換え、そして 」を追加することによって、正規化されたサーバから を受け'という接頭辞を付けてください。たとえば、クライアントが 'X-XSRF-TOKEN'ヘッダーを送信する場合、設定は 'HTTP_X_XSRF_TOKEN'にする必要があります。

また、私はここにジャンゴでCSRF Failed: CSRF token missing or incorrect.エラーにつながる可能性がいくつかの問題を蓄積my questionへの参照を、残しています。

関連する問題