Настройка HTTP-заголовков приложений в AngularJS

Есть ли способ установить заголовки $httpProvider вне angular.module('myApp', []).config()?

Я получаю Auth-Token с сервера после входа в систему пользователя, и мне нужно добавить его как HTTP-заголовок для всех следующих запросов.

Ответ 1

$http.defaults.headers.common['Auth-Token'] = 'token';

Кажется, что headers() нормализует имена клавиш.

Ответ 2

Вы можете использовать заголовки по умолчанию для angular 1.0.x:

$http.defaults.headers.common['Authentication'] = 'authentication';

или запросить перехватчик для angular 1.1.x +:

myapp.factory('httpRequestInterceptor', function () {
  return {
    request: function (config) {

      // use this to destroying other existing headers
      config.headers = {'Authentication':'authentication'}

      // use this to prevent destroying other existing headers
      // config.headers['Authorization'] = 'authentication';

      return config;
    }
  };
});

myapp.config(function ($httpProvider) {
  $httpProvider.interceptors.push('httpRequestInterceptor');
});

Поскольку фабрики/службы являются одноточечными, это работает до тех пор, пока вам не нужно динамически изменять свое значение "аутентификации" после того, как служба была создана.

Ответ 3

Добавление к приведенным выше ответам @Guria и @Panga

config.headers['X-Access-Token'] = $window.sessionStorage.token;

В заголовке можно использовать x-access-token как JWT (jsonwebtoken). Я храню JWT в хранилище сеансов, когда пользователь впервые аутентифицируется.