2

Я использую node.js в качестве backend для запуска сервера API REST и angularjs в качестве front-end для вызова HTTP GET. Сервер REST использует базовую аутентификацию HTTP. Имя пользователя: foo, а пароль - bar.Что не так с этим кодом HTTP-Get Basic?

Я протестировал, что бэкэнд-код работает с использованием клиента-рестайзера. Вот код рабочего клиента;

var client = restify.createJsonClient({ 
    url: 'http://127.0.0.1' 
}); 

client.basicAuth('foo', 'bar'); 

client.get('/alert?list=alertList', function(err, req, res, obj) { 
    console.log(obj); 
}); 

У меня проблемы с получением моего urularjs http-get code для работы. Вот соответствующий код;

.controller('ViewCtrl', ['$scope', '$http', '$base64', 
     function ($scope, $http, $cookies, $base64) { 
      var url = '127.0.0.1/alert?list=alertList'; 
      var auth = $base64.encode('foo:bar'); 
      $http.defaults.headers.common['Authorization'] = 'Basic ' + auth; 
      $http.get(url).then(function (response) { 
       tableData = response.data; 
       //handle data 
      }); 
} 

Не могу понять, что не так с кодом angularjs. Я использую restify authorizationParser. Существуют ли какие-либо дополнительные требования к заголовку, чтобы получить базовую аутентификацию HTTP, работающую с reify authorizationParser?

Сообщение об ошибке в браузере выглядит следующим образом:

{ 
code: "NotAuthorized", 
message: "" 
} 

В хром-отладчике это то, что я вижу;

Request Method:GET 
Status Code:403 Forbidden 
Remote Address:127.0.0.1:80 
Request Headers 
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2,ja;q=0.2 
Cache-Control:max-age=0 
Connection:keep-alive 
Host:127.0.0.1 
If-Modified-Since:Wed, 23 Dec 2015 02:22:04 GMT 
Upgrade-Insecure-Requests:1 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 

Я использую этот base64 угловой модуль. https://github.com/ninjatronic/angular-base64

EDIT: Я обнаружил, что с угловым кодом ничего нет. Проблема заключается в обновлении сервера. Восстановительный сервер поддерживает статический веб-сервер, и когда включена HTTP-аутентификация, этот статический веб-сервер перестает работать.

+1

Что сказать, ошибка? –

+0

Я отредактировал вопрос, чтобы показать ошибку. Благодарю. – user781486

ответ

4

Внутри контроллера, вы можете передать заголовок аутентификации, как это:

var url = '127.0.0.1/alert?list=alertList'; 
var auth = $base64.encode('foo:bar'); 
var headers = {"Authorization": "Basic " + auth}; 
$http.get(url, {headers: headers}).then(function (response) 
    tableData = response.data; 
    //handle data 
}); 
+0

Это еще один способ написания кода. Благодарю. – user781486