The problem is that SessionAuthentication performs its own CSRF check. This is why you get a missed CSRF error even when CSRF middleware is commented out. You can add @csrf_exempt for each view, but if you want to disable CSRF and have session authentication for the whole application, you can add additional middleware like this -
class DisableCSRFMiddleware(object): def __init__(self, get_response): self.get_response = get_response def __call__(self, request): setattr(request, '_dont_enforce_csrf_checks', True) response = self.get_response(request) return response
I created this class in myapp / middle.py. Then import this middleware into Middleware in settings.py
MIDDLEWARE = [ 'django.middleware.common.CommonMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', #'django.middleware.csrf.CsrfViewMiddleware', 'myapp.middle.DisableCSRFMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
This works with DRF on django 1.11
Madhuri Gole Dec 19 '17 at 2:04 on 2017-12-19 14:04
source share