2013-08-23 16 views
9

99% moich wywołań ajaxowych wymaga określonego "X-API-TOKEN" do uwierzytelniania i komunikowania się z moim Railsowym API REST. Ale dzwonię też do jednego interfejsu API strony i ciągle pojawia się komunikat "Pole nagłówka żądania X-API-TOKEN nie jest dozwolone przez Kontrolki dostępu-Zezwalaj na dostęp."Jak usunąć domyślne nagłówki tylko dla konkretnych żądań XHR w AngularJS?

Wszystko działa poprawnie, jeśli delte nagłówek tuż przed wywołaniem, a prace wokół byłoby usunąć, a następnie ponownie dodać po zakończeniu rozmowy, ale jest łatwiejszy sposób niż to:

apiToken = $http.defaults.headers.common["X-API-TOKEN"] 
    delete $http.defaults.headers.common["X-API-TOKEN"] 

    $http(
     method: "GET" 
     url: 'http://...}}' 
    ).success((data, status, headers, config) -> 
    ).error (data, status, headers, config) -> 

    $http.defaults.headers.common["X-API-TOKEN"] = apiToken 

Odpowiedz

4

Obiekt konfiguracji usługi $http umożliwia zastąpienie wysyłania nagłówka http dla konkretnego żądania. Zobacz właściwość konfigurowania headers.

Może to zawierać listę nagłówków lub funkcję, która zwraca listę nagłówków. W przypadku żądania nagłówka innego niż auth wykonaj kopię domyślnych nagłówków, usuń nagłówek, którego nie potrzebujesz, a następnie wprowadź żądanie. Możesz zachować to do późniejszego wykorzystania.

Zobacz $httpdocumentation

+0

To rozwiązanie jest dobre dla, powiedzmy, mamy tylko jeden klucz, ale co jeśli mamy wiele niestandardowych nagłówków i mamy wiele takich zewnętrznych wywołań api, w których nie potrzebujemy tych nagłówków. Czy możemy to osiągnąć za pomocą funkcji transformRequest? –

13

ustawić nagłówek pragnienie/nagłówków niezdefiniowany tak, to nie wpłynie na globalne ustawienia.

$http({ 
     method: 'GET', 
     url: 'someurl', 
     headers: { 
      'X-API-TOKEN': undefined 
     } 
     } 
    ) 
+1

niezdefiniowana jest droga. Pozdrawiam Eduardo – SkyBlues87