我在Django REST框架中使用TokenAuthentication來讓腳本遠程訪問我的API。運行API的域落後於TLS證書。與CSRF/CORS的TokenAuthentication問題的Django REST框架
我已經搜遍了很多來源,並且在來這裏弄清楚我的問題是什麼之前嘗試了很多選擇。總之,當我嘗試發佈時,我仍然會收到CSRF verification failed. Request aborted.
錯誤。
這是我的觀點:
# @csrf_exempt
@api_view(['POST'])
@authentication_classes((TokenAuthentication,))
@permission_classes((permissions.IsAuthenticated,))
def create_object(request):
csrf_exempt
裝飾無關這裏完成。所以,我也試了一下我的urls.py
:
url(r'^create_object/', csrf_exempt(views.create_object),),
我甚至嘗試寫一個定製的裝飾,並採用this suggestion。即使當我這樣做,我甚至不能在得到失敗之前讓裝飾器執行。也許我的中間件訂購有問題?
'sslify.middleware.SSLifyMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'corsheaders.middleware.CorsPostCsrfMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.RemoteUserMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
這裏是我的Django CORS設置:
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = ('example.com',)
CORS_REPLACE_HTTPS_REFERER = True
我的解決方案(因爲我找不出原因)是添加一些在csrf之前執行的中間件,它在請求路徑上檢查請求對象以設置標記以跳過保護。明天我會有機會發布代碼作爲答案。 –