2014-05-16 7 views
23

Do wysyłania OAuth2 żeton ja się domyślne ustawienie nagłówka na angularjs tak:Ustaw domyślne header na angularjs ale nie używaj go na jeden konkretny wniosek

$http.defaults.headers.common['Authorization'] = 'Bearer ' + access_token; 

Działa to doskonale, ale nie muszę tego nagłówek (pojawia się błąd) dla jednego konkretnego żądania.

Czy istnieje sposób na wykluczenie nagłówka domyślnego podczas wykonywania tego żądania?

Dzięki!

SOLVED

Dzięki Riron uzyskania mnie na właściwą drogę. Oto odpowiedź:

$http({ 
    method: 'GET', 
    url: 'http://.../', 

    transformRequest: function(data, headersGetter) { 
     var headers = headersGetter(); 

     delete headers['Authorization']; 

     return headers; 
    } 
}); 

Odpowiedz

17

Podczas rozmowy telefonicznej z $ http można przesłonić domyślne nagłówki dostarczając je bezpośrednio w swoim wniosku config:

$http({method: 'GET', url: '/someUrl', headers: {'Authorization' : 'NewValue'} }).success(); 

przeciwnym razie można przekształcić swoją prośbę używając transformRequest parametr nadal w konfiguracji $ http. Zobacz Doc:

transformRequest - {function(data,headersGetter)|Array.<function(data, headersGetter)>} - przekształcić funkcję lub tablicę takich funkcji. Funkcja przekształcenia pobiera treść i nagłówki żądania HTTP i zwraca przekształconą wersję (zazwyczaj serializowaną).

W ten sposób można usunąć nagłówek dla pojedynczego żądania zanim Wyślij samopoczucie:

$http({method: 'GET', 
     url: '/someUrl', 
     transformRequest: function(data,headersGetter){ //Headers change here } 
}).success(); 
+0

Więc jeśli mogę ustawić je jako domyślne nagłówka (nie jako transformRequest, ale sposób w jaki to zrobiłem w mój post z pytaniem), naprawdę nie mogę go rozbroić na jedno żądanie? – Julius

+0

Jeśli chcesz go usunąć, będziesz musiał użyć parametru "transformRequest" dla konkretnego żądania i zmodyfikuj nagłówki za pomocą niestandardowej funkcji. – Riron

+0

Przestroga - https://github.com/angular/angular.js/commit/5da1256fc2812d5b28fb0af0de81256054856369 Z powodu 5da1256 funkcje transformRequest nie mogą już modyfikować nagłówków żądań. –

6

Dla spóźnialskich, podczas gdy rozwiązanie może pracowali - faktycznie nie ma potrzeby korzystania transformRequest tego .

kątowego docs dla usługi $ http faktycznie mają dokładnie tę sytuację obejmował:

Aby jawnie usunąć nagłówek automatycznie dodaną poprzez $ httpProvider.defaults.headers na żądanie jednej podstawie, użyj nagłówków Właściwość, ustawiając żądany nagłówek na undefined. Na przykład:

var req = { 
     method: 'POST', 
     url: 'http://example.com', 
     headers: { 
      'Content-Type': undefined 
     }, 
     data: { 
      test: 'test' 
     } 
} 

$http(req).success(function(){...}).error(function(){...}); 
6

Angular 1.4.0 nie można już modyfikować nagłówki żądania używając transformRequest:

Jeśli trzeba dynamicznie dodawać/usuwać nagłówki powinno się to odbywać w funkcję nagłówka, na przykład :

$http.get(url, { 
    headers: { 
    'X-MY_HEADER': function(config) { 
     return 'abcd'; //you've got access to a request config object to specify header value dynamically 
    } 
    } 
}) 
0

Podczas gdy $httpProvider może przesłonić $http wykorzystanie intereceptors to 1 sposób postępowania z tym, że w końcu robi to w ten sposób

function getMyStuff(blah) { 

     var req = { 
      method: 'GET', 
      url: 'http://...', 
      headers: { 
       'Authorization': undefined 
      } 
     } 
     return $http(req) 
      .then(function(response) { 
       return response.data; 
      }); 


} 
Powiązane problemy