Skip to content

Commit b76984d

Browse files
authored
Allow custom CSRF_HEADER_NAME setting. (#4415)
1 parent 966330a commit b76984d

File tree

4 files changed

+11
-2
lines changed

4 files changed

+11
-2
lines changed

rest_framework/renderers.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,12 @@ def get_context(self, data, accepted_media_type, renderer_context):
645645
else:
646646
paginator = None
647647

648+
csrf_cookie_name = settings.CSRF_COOKIE_NAME
649+
csrf_header_name = getattr(settings, 'CSRF_HEADER_NAME', 'HTTP_X_CSRFToken') # Fallback for Django 1.8
650+
if csrf_header_name.startswith('HTTP_'):
651+
csrf_header_name = csrf_header_name[5:]
652+
csrf_header_name = csrf_header_name.replace('_', '-')
653+
648654
context = {
649655
'content': self.get_content(renderer, data, accepted_media_type, renderer_context),
650656
'view': view,
@@ -675,7 +681,8 @@ def get_context(self, data, accepted_media_type, renderer_context):
675681
'display_edit_forms': bool(response.status_code != 403),
676682

677683
'api_settings': api_settings,
678-
'csrf_cookie_name': settings.CSRF_COOKIE_NAME,
684+
'csrf_cookie_name': csrf_cookie_name,
685+
'csrf_header_name': csrf_header_name
679686
}
680687
return context
681688

rest_framework/static/rest_framework/js/csrf.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ $.ajaxSetup({
4646
// Send the token to same-origin, relative URLs only.
4747
// Send the token only if the method warrants CSRF protection
4848
// Using the CSRFToken value acquired earlier
49-
xhr.setRequestHeader("X-CSRFToken", csrftoken);
49+
xhr.setRequestHeader(window.drf.csrfHeaderName, csrftoken);
5050
}
5151
}
5252
});

rest_framework/templates/rest_framework/admin.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ <h4 class="modal-title" id="myModalLabel">{{ error_title }}</h4>
232232
{% block script %}
233233
<script>
234234
window.drf = {
235+
csrfHeaderName: "{{ csrf_header_name|default:'X-CSRFToken' }}"
235236
csrfCookieName: "{{ csrf_cookie_name|default:'csrftoken' }}"
236237
};
237238
</script>

rest_framework/templates/rest_framework/base.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@ <h1>{{ name }}</h1>
263263
{% block script %}
264264
<script>
265265
window.drf = {
266+
csrfHeaderName: "{{ csrf_header_name|default:'X-CSRFToken' }}"
266267
csrfCookieName: "{{ csrf_cookie_name|default:'csrftoken' }}"
267268
};
268269
</script>

0 commit comments

Comments
 (0)