Skip to content

Commit b508ca3

Browse files
author
tom christie [email protected]
committed
CSRF validation will only be applied to POST requests, so let's only load .RAW_CONTENT in those cases
1 parent da7d49a commit b508ca3

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

djangorestframework/authenticators.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,18 @@ def authenticate(self, request):
8080

8181

8282
class UserLoggedInAuthenticator(BaseAuthenticator):
83-
"""Use Djagno's built-in request session for authentication."""
83+
"""Use Django's built-in request session for authentication."""
8484
def authenticate(self, request):
8585
if getattr(request, 'user', None) and request.user.is_active:
86-
# Temporarily request.POST with .RAW_CONTENT, so that we use our more generic request parsing
87-
request._post = self.mixin.RAW_CONTENT
88-
resp = CsrfViewMiddleware().process_view(request, None, (), {})
89-
del(request._post)
90-
if resp is None: # csrf passed
91-
return request.user
86+
# If this is a POST request we enforce CSRF validation.
87+
if request.method.upper() == 'POST':
88+
# Temporarily replace request.POST with .RAW_CONTENT,
89+
# so that we use our more generic request parsing
90+
request._post = self.mixin.RAW_CONTENT
91+
resp = CsrfViewMiddleware().process_view(request, None, (), {})
92+
del(request._post)
93+
if resp is not None: # csrf failed
94+
return None
95+
return request.user
9296
return None
9397

0 commit comments

Comments
 (0)