2013-06-04 18 views
5

Napisałem następujący kontroler do testowania HTTP Basic Auth przy użyciu Angular JS.Nie można ustawić nagłówka HTTP Basic Auth w AngularJS

function TestCtrl($scope, $http, Base64){ 
    $http.defaults.headers.common.Authorization = 'Basic ' + Base64.encode('admin:secret'); 
    $http.jsonp('http://localhost:5000/test'+'/?callback=JSON_CALLBACK', {query:{isArray:true }}). 
    then(function (response) { 
     $scope.test = response.data; 
    }); 
} 

widzę nagłówek jest ustawiony kiedy console.log($http.defaults.headers). Ale kiedy sprawdzam nagłówki zgłoszeń za pomocą paska narzędzi Chrome Developer Toolbar lub Firebug w Firefoksie, nie widzę nagłówka Authorization.

Serwer otrzymujący żądanie nie otrzymuje nagłówka Authorization.

Co robię źle tutaj?

+1

Nie można dostosować nagłówków za pomocą JSONP. Zobacz http://stackoverflow.com/questions/3073287/set-headers-with-jquery-ajax-and-jsonp –

+0

Dzięki .. Zgadnij, powinienem użyć get lub post. – Manu

Odpowiedz

4

Wierzę, że odpowiedź brzmi: "Tak, dla zwykłych żądań AJAX powinieneś być w stanie ustawić odpowiednie nagłówki auth".

Jednak nie używasz standardowego połączenia XHR, gdy używasz JSONP (w oparciu o przykład), , który zmienia odpowiedź na "Nie".

Jeśli utknąłeś przy użyciu JSONP, nie sądzę, że możesz wysłać jakiekolwiek nagłówki autoryzacji. JSONP po prostu nie działa tak, jak na przykład Angular's $http.get.

Aby uzyskać szczegółowe informacje, zobacz http://schock.net/articles/2013/02/05/how-jsonp-really-works-examples/, ale krótka wersja to JSONP, która umieszcza znacznik <script>, który pobiera niektóre dane. Zwrócone dane wywołują funkcję, którą podajesz (JSON_CALLBACK w twoim przykładzie) wokół danych dostarczanych przez serwer. Z tego powodu nie można zmienić nagłówków - żądanie jest żądaniem HTTP GET dokładnie tak, jakby wkleić adres URL tagu skryptu na pasku adresu przeglądarki.

1

JJ odpowiedział na to doskonale.

Aby uzyskać więcej informacji na temat tego przeglądania, wystarczy przesłać nagłówek Basic Authorization, wystarczy umieścić nazwę użytkownika i hasło na początku adresu URL. Spowoduje to wysłanie nagłówka.

Na przykład, przy użyciu localhost jako URL i Admin: tajemnicę jako nazwa użytkownika: hasło, zmienić:

http://localhost:5000 

do:

http://admin:[email protected]:5000 

Uwaga: @OliBlogger wskazał, że najnowsza wersja Chrome nie obsługuje już tej funkcji. Sprawdź swój komentarz dotyczący linku do aktualnej aktualizacji statusu Chrome.

+0

dlaczego głosowanie w dół? – eclipse1121

+0

Próbowałem tego w pasku adresu przeglądarki, ale wystąpił tylko błąd. Może to być funkcja biblioteki JS? Być może lekceważenie było spowodowane brakiem szczegółów i prawdopodobnie nie najlepszą praktyką, ale jest to interesująca funkcja. – user1944491

+0

dzięki za komentarz. Oto [przykład] (http://i.imgur.com/l0os1pJ.png), w jaki sposób można to zrobić za pomocą interfejsu API Stripe, który używa Basic Auth. To, co może być wymagane, to żądanie adresu URL wymaga zwrócenia nagłówka Basic Auth oraz nagłówka nieautoryzowanego 401, ale nie jestem pewna. – eclipse1121

Powiązane problemy