我們有一個使用REST框架的Django應用程序。它是一個nginx,redis,芹菜,gunicorn和PostgreSQL設置。只有一個App服務器。Django,Django REST框架,Internet Explorer和CSRF令牌丟失或不正確
我們的AJAX調用使用此功能:
$.ajaxSetup({
beforeSend: function (jqXHR, settings) {
...
jqXHR.setRequestHeader("X-CSRFToken", secureCheck.reqCSRFToken());
})
if ($currentForm.attr('method') != 'POST') {
if ($currentForm.attr('method') != '') {
var typeRequest = $currentForm.attr('method');
headersRequest= {'X-HTTP-Method-Override': typeRequest};
}
}
var jqxhr = $.ajax({
headers: headersRequest,
url: url,
type: 'POST',
dataType: dataType,
data: params,
async: async
});
jqxhr
.done(function (data, textStatus, jqxhr) {
呼叫發送到這一點:
@api_view(['POST'])
def save(request):
.....
return HttpResponse(json.dumps(save_results_and_errors, cls=DjangoJSONEncoder), 'application/json')
settings.py:
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
),
也:
'django.middleware.csrf.CsrfViewMiddleware'
我們從來沒有得到任何與CSRF相關的錯誤,除了一些人,六分之一的人使用Internet Explorer(版本9或11)。 「save」函數不斷返回錯誤{「detail」:「CSRF失敗:CSRF令牌丟失或不正確。」}。
清除IE歷史記錄,緩存和Cookie沒有奏效。解決此問題的唯一方法是重新啓動計算機(??? !!)。
我該如何追蹤此行爲?我們在任何網頁中都沒有任何iframe。我們的日誌文件中沒有任何內容與此問題有關。
有沒有人有這方面的線索?