2017-02-27 22 views
0

DRFのsession authenticationで保護されたAPIエンドポイントにアクセスしようとしています。これは、このように、私はDjango docs次行ったリクエストヘッダにCSRFのクッキーを渡す必要があります。セッション認証でDjango Rest FrameworkへのHTTPリクエストを作成するにはどうすればよいですか?

import * as Cookies from "js-cookie"; 
var csrftoken = Cookies.get('csrftoken'); 

fetch('/api/myendpoint', { headers: { 'X-CSRFToken': csrftoken }}) 
    .then(response => ...) 

私はこのように私のsettings.pyでセッション認証をオンにしている:

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

Djangoのログインと認証は、通常のページでは正しく機能していますが、API呼び出しでは正しく機能していません。私はいつも応答Authentication credentials were not providedで403エラーが発生します。 Chromeのネットワークパネルでリクエストを調べると、X-CSRFTokenヘッダーの値が現在のcsrftoken Cookieの値に正しく設定されていることを確認しました。

答えて

0

回答はhereです。 csrftokenはGETのリクエストヘッダーには含まれていません。代わりに、Fetch docsに記載されているように、クッキーを含む

fetch('/api/workflows', { credentials: 'include' })... 

PUT、PATCH、およびDELETE要求に対してX-CSRFTokenを設定する必要があります。

関連する問題