Would appreciate someone showing me how to make a simple POST request using JSON with Django REST framework. I do not see any examples of this in the tutorial anywhere?
To give an update on current status, and sum up a few answers:
AJAX requests that are made within the same context as the API they are interacting with will typically use
SessionAuthentication
. This ensures that once a user has logged in, any AJAX requests made can be authenticated using the same session-based authentication that is used for the rest of the website.AJAX requests that are made on a different site from the API they are communicating with will typically need to use a non-session-based authentication scheme, such as
TokenAuthentication
.
Therefore, answers recommending to replace SessionAuthentication
with TokenAuthentication
may solve the issue, but are not necessarily totally correct.
To guard against these type of attacks, you need to do two things:
Ensure that the 'safe' HTTP operations, such as
GET
,HEAD
andOPTIONS
cannot be used to alter any server-side state.Ensure that any 'unsafe' HTTP operations, such as
POST
,PUT
,PATCH
andDELETE
, always require a valid CSRF token. If you're usingSessionAuthentication
you'll need to include valid CSRF tokens for anyPOST
,PUT
,PATCH
orDELETE
operations.In order to make AJAX requests, you need to include CSRF token in the HTTP header, as described in the Django documentation.
Therefore, it is important that csrf is included in header, as for instance this answer suggests.
Reference: Working with AJAX, CSRF & CORS, Django REST framework documentation.