9

У меня есть существующий код угловойа, который делает HTTP GET. Извлеченный ниже - некоторый код, соответствующий внутри контроллера.Добавить HTTP базовую аутентификацию для этого HTTP GET в angularjs

.controller('imptViewCtrl', ['$scope', '$http', 
     function ($scope, $http,) { 
        var url = $configuration.webroot + '/impt/list?list=testlist'; 
        $http.get(url).then(function (response) { 
           tableData = response.data; 
           }); 
     }]); 

Я хотел бы добавить базовую аутентификацию HTTP в HTTP GET. Имя пользователя: foo, а пароль - bar. Как это может быть сделано?

+1

Может быть, это может помочь: http://stackoverflow.com/questions/18877715/http-auth-headers-in-angularjs? – ssougnez

ответ

18

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

https://github.com/ninjatronic/angular-base64

После этого нагрузка base64 в ваши приложения и конфигурации заголовков.

angular 
    .module('myApp', ['base64']) 
    .config(function($httpProvider, $base64) { 
     var auth = $base64.encode("foo:bar"); 
     $httpProvider.defaults.headers.common['Authorization'] = 'Basic ' + auth; 
    }) 

Вы также можете указать заголовок аутентификации get функции seprately, если вам нравится.

var auth = $base64.encode("foo:bar"), 
    headers = {"Authorization": "Basic " + auth}; 
$http.get(url, {headers: headers}).then(function (response) { 
+0

Ваш код выглядит нормально, но у меня проблемы с его работой. Я задал еще один вопрос. https://stackoverflow.com/questions/34429313/what-is-wrong-with-this-http-get-basic-authentication-code – user781486

+0

Ваш код работает. Я думаю, что это мой сервер, который дает проблему. Отмечено как правильный ответ. – user781486

+0

Зачем вам нужна библиотека для работы с base64? почему бы не использовать btoa() https://www.w3schools.com/jsref/met_win_btoa.asp? – splintor

9

Вместо того чтобы использовать библиотеку для кодирования авторизацию на базе 64, вы могли бы просто использовать:

window.btoa("user:pass")

он поддерживается большинством браузеров.

https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/btoa

+0

Как насчет сообщений, положить, удалить, и т.д. и др.? – DRaehal

+2

@DRaehal способ аутентификации запроса не зависит от HTTP-глагола запроса. Если целевой конечной точке требуется базовая аутентификация, вы просто применяете этот заголовок, будь то POST, PUT и т. Д. – superjos