2

Без Джанго Rest Framework, я использовал для создания запросов формы/POST, как так:Django Rest Framework + AngularJS: Правильный способ защиты CSRF?

<form id='loginForm' method="post" action="/register/">{% csrf_token %} 
    ... 
</form> 

, но я смотрел с помощью Django Rest Framework и AngularJS на веб-интерфейсе, и я не был уверен, как использовать маркер CSRF, поэтому я решил провести некоторое исследование. Я наткнулся на этот сайт: http://blog.kevinastone.com/getting-started-with-django-rest-framework-and-angularjs.html, и если вы прокрутите вниз до «Interlude: AngularJS + защита CSRF» раздел, он говорит, что мне нужно добавить следующий сценарий:

// Add the CSRF Token 
var app = angular.module('example.app'); // Not including a list of dependent modules (2nd parameter to `module`) "re-opens" the module for additional configuration 
app.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.defaults.headers.common['X-CSRFToken'] = '{{ csrf_token|escapejs }}'; 
}]); 

Затем я наткнулся на этот SO сообщение: Django csrf token + Angularjs, который говорит, что после добавления

django.middleware.csrf.CsrfViewMiddleware 

моего MIDDLEWARE_CLASSES является settings.py, все, что мне надо добавить следующие строки

angular.module("myApp", []) 
    .config(['$httpProvider', function($httpProvider) { 
     $httpProvider.defaults.xsrfCookieName = 'csrftoken'; 
     $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; 
    }]) 

Обратите внимание, что, когда я смотрел на других SO сообщений, которые объясняют, как сделать аутентификации пользователей/регистрации, используя ФПИ и AngularjS (например, этот пост: User Authentication in Django Rest Framework + Angular.js web app) ответы не включают в себя следующие строки:

$httpProvider.defaults.xsrfCookieName = 'csrftoken'; 
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; 

С тем, что , каков правильный способ добавления защиты CSRF с помощью Django Rest Framework и AngularJS?

+0

Вам может понравиться http://stackoverflow.com/questions/18156452/django-csrf-token-angularjs –

+0

@RajeshKaushik справа, я упомянул об этой ссылке в своем сообщении. В принципе, я хочу знать, что рекомендуемый способ сделать это, потому что, когда я оглядывался, я нашел несколько способов сделать это (я связан с разными способами, которые я видел/читал в своем сообщении). Я немного смущен, потому что разные люди делают это по-разному, и я не уверен, какой лучший подход. – user2719875

+1

Извините, я не помню точную настройку, но я демонстрирую, как настроить ее в этом видео. https://www.youtube.com/watch?v=VZ8NIoLN-yQ] –

ответ

3

Ваш второй способ ($httpProvider.defaults), вероятно, лучший способ это сделать. См. angular docs on http here. Варианты xsrfCookieName и xsrfHeaderName относительно новы в Угловом. (Я думаю, что они вошли в 1.3, если память служит ...) Таким образом, другой код, который вы нашли, скорее всего, предшествовал более новому, лучшему способу сделать это. Нет необходимости в вызове рендеринга или эвакуации в шаблоне = чистый код.

Смежные вопросы