我有AJAX代码,它向POST请求发送到Django 1.6.4应用程序。该视图通过django.middleware.csrf.CsrfViewMiddleware
启用CSRF保护。如果我没有通过cookie但通过HTTP_X_CSRFTOKEN,则失败。Django 1.6 HTTP_X_CSRFTOKEN标头被忽略,如果csrf cookie丢失
我在查看django.middleware.csrf.CsrfViewMiddleware
的代码,我看到在第161行,它检查从cookie中获取它后是否if csrf_token is None:
。如果它是None,它会返回。之后才会检查csrfmiddlewaretoken
param和HTTP_X_CSRFTOKEN
请求标头。这看起来不正确,只有在检查所有可能的地方找到它的位置后,才应该检查缺少的csrf_token值。
其他人有类似的问题?我看到这个不正确吗?
我知道'beforeSend'并正在使用它。虽然HTTP头称为X-CSRFToken,但Django通过预先设置HTTP_使其可用作HTTP_X_CSRFTOKEN。请参阅https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.META。但是,这不是我的问题。我提供了标题值,Django甚至没有看到它(请看我在原帖中引用的Django源文件) –
已更新我的答案。 – Eagllus