Подтвердить что ты не робот

Angular JS Проверить токен CSRF в запросе POST

Я использую AngularJS с Rails. У меня есть следующий запрос, который обновляет пользователей в массовом порядке.

 $http{
    method: 'POST',
    url: $scope.update_url,
    params: {selected_ids: userIds}
 }

Это не может быть запрос "GET" из-за ограничений в длине URL-адреса (http://support.microsoft.com/kb/208427)

Но для запроса "POST" нам нужно иметь токен аутентификации CSRF в заголовке.

Как мы можем установить токен CSRF в заголовок запроса сообщения?

4b9b3361

Ответ 1

Вы можете настроить заголовки HTTP, как описано в $http.

Вы можете настроить его глобально:

$httpProvider.defaults.headers.post['My-Header']='value'   (or)
$http.defaults.headers.post['My-Header']='value';

или для одного запроса:

$http({
   headers: {
      'My-Header': 'value'
   }  
});

Вот важная цитата из Angular:

Защита от перекрестных запросов (XSRF) Защита XSRF - это метод который несанкционированный сайт может получить ваши личные данные пользователя. Angularпредоставляет следующий механизм для противодействия XSRF. При выполнении XHR запросов, служба $http считывает токен из файла cookie, называемого XSRF-TOKEN и устанавливает его как заголовок HTTP X-XSRF-TOKEN. Поскольку только JavaScript, который работает в вашем домене, может читать cookie, ваш сервер может быть гарантировано, что XHR поступает из JavaScript, работающего на вашем компьютере. домен.

Чтобы воспользоваться этим, вашему серверу необходимо установить токен в JavaScript читаемый сеансовый файл под названием XSRF-TOKEN на первом HTTP GET запрос. При последующих запросах, не связанных с GET, сервер может проверить, что cookie соответствует HTTP-заголовку X-XSRF-TOKEN, и поэтому убедитесь, что только JavaScript, работающий в вашем домене, мог прочитать токен. токен должен быть уникальным для каждого пользователя и должен поддаваться проверке сервера (чтобы JavaScript не создавал свои собственные токены). Мы рекомендуется, чтобы токен являлся дайджестом аутентификации вашего сайта cookie с солью для дополнительной безопасности.

Ответ 3

Недавно я столкнулся с той же проблемой и добавил gem angular_rails_js. Насколько я понимаю, для каждого контроллера rails создается файл cookie с рельсами CSRF-TOKEN, которые будут улавливаться (поведение по умолчанию $http) на angular $http.