0

Я хочу передать комбинацию имени пользователя и пароля, которая необходима для вызова REST на api.Простая аутентификация REST получает вызов с запросом перехватчиков угловой службы

Controller.js

var app = angular.module('myApp', []); 

//The service to put the interceptor configuration on (not on all $http method calls) 
app.factory('getCallsApi', ['$http', function($http) { 
    return { 
     get: function(callback) { 
      $http.get(/* REST URI */).success(function(data) { 
       callback(data); 
      }); 
     } 
    } 
}]); 

var Interceptor = function($q) { 
    return { 
     request: function(config) { 
      //TODO: Pass in username and password (hardcoded) to get through authentication 

     }, 
     requestError: function(rejection) { 

     }, 
     response: function(config) { 
      //TODO: ADD Cross origin headers 

     }, 
     responseError: function(rejection) { 

     } 
    } 
} 

app.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push(Interceptor); 
}]); 

myApp.controller('appController', ['$scope','getCallsApi', function($scope, getCallsApi) { 
    getCallsApi.get(function(data) { 
    console.log(data); 
    }); 
}]); 

В настоящее время я получавшие две ошибки в консоли. Во-первых, это статус 401 для несанкционированного доступа и ошибка, связанная с перекрестными заголовками, не найденными на запрошенном ресурсе. Я не могу поместить заголовки источника X в запрошенный ресурс самостоятельно, потому что у меня нет прав на редактирование ответа API.

+1

если сервер вы запрашиваете против не допускает перекрестное происхождение, и вы не контролируют сервер, чтобы добавить заголовки, тогда *** человек, который *** контролирует сервер, должен будет сделать это за вас. Невозможно обойти эту функцию безопасности. – Claies

+0

Да, я знаю, что это был длинный выстрел, чтобы перехватить ответ и добавить заголовки. Но так или иначе, как мне пройти 401 с помощью перехватчика запроса для вызова службы? –

ответ

0

Не говоря уже о проблеме с перекрестным происхождением, но вот как добавить что-то в заголовки запроса. В моем случае я передаю токен, который хранится в localstorage. Мы связываем это значение угловой постоянной и ввести его в службу перехватчика:

.constant('AUTH_TOKEN', localStorage.getItem('myapp.authToken')) 

И в вашем перехватчика:

var Interceptor = function ($q) { 
     return { 
      request: function (config) { 

       if (AUTH_TOKEN) { 
        config.headers['Authorization'] = 'Token ' + AUTH_TOKEN; 
       } 
       return config; 
      } 
     } 
    } 
+0

Спасибо. Но я довольно новичок в Angular, и я не уверен, как использовать эту константу (с комбинацией имени пользователя и пароля) для аутентификации моего запроса на api. Я попытался сделать эту константу - {'username': xxxx, 'password': xxxxx}, но это не сработает, и я все равно получаю 401. –

+0

Константа была всего лишь примером. Вероятно, вы не должны передавать имя пользователя и pw в заголовках, а как тело запроса на запись для входа в систему. Какую апи вы пытаетесь ударить? Это твое? Вы знаете, чей это? Есть ли документация? Я никогда не слышал об api, который требует имя пользователя и пароль как часть заголовков запроса. Вы должны сделать еще несколько исследований о том, как это работает. – jakeed1

+0

Я знаю, что это нехорошая идея, проходящая в имени пользователя и пароле в заголовке, но я ищу способ пройти аутентификацию, не выставляя форму пользователю, предоставляя действительную пару в код, чтобы он использовался для аутентификации при каждом вызове. Его частный api, и я не владелец, хотя может быть документация. Всякий раз, когда я пытаюсь получить некоторые данные, появляется всплывающее окно с предупреждением для имени пользователя и пароля (у вас есть действующий). –

Смежные вопросы