2013-11-01 4 views
0

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

angular.module('App', ['ngResource']); 

function AppCtrl($scope, $resource){ 
$scope.app = $resource('https://theapiurl.com/parameter=:action', 
    {action:'My Parameter works fine!'}, 
    {method: 'GET'}, 
    {headers: 'auth-key' : 'key'}); 
$scope.app.get(); 
} 

Я просто не могу получить заголовок для отправки. Спасибо за прочтение.

+0

Что авторизации схема использует 'theapiurl.com'? – ssedano

+0

Im действительно не уверен, как ответить на это. Апи и ключ предоставлены mashape.com. В этом документе описывается, как они аутентифицируются. https://www.mashape.com/docs/consume/rest#authorization –

ответ

4

Если вы используете 1.1.x углового ресурса + должно работать:

angular.module('App', ['ngResource']); 

function AppCtrl($scope, $resource){ 
    $scope.app = $resource('https://theapiurl.com/parameter=:action', 
     { 
     action:'My Parameter works fine!' 
     }, 
     { 
     get: { 
      method: 'GET', 
      headers : { 'auth-key' : 'key' } 
     } 
     }); 
    $scope.app.get(); 
} 

Если вы используете 1.0.x ветвь это не будет работать. Я считаю, что единственной альтернативой является установка глобальных заголовков по умолчанию в $ httpProvider или непосредственно для пользователя $ http (не используя $ resource). Вот как вы бы установить заголовки по всему миру:

$httpProvider.defaults.headers.get['auth-key'] = 'key'; 
+0

Спасибо. Но заголовки все еще не появляются. –

+0

Я пропустил одно в своем ответе. Я обновил его, чтобы показать правильный путь. Обратите внимание, что это будет работать только в 1.1.x и выше. – dtabuenc

+0

Отлично. Я переключился на версию 1.1.5 с 1.0.7 и добавил действие 'get', и он работает по назначению! Хотя, у меня есть лишняя фигурная скобка. Большое спасибо за Вашу помощь. –

1

Чтобы избежать установки заголовка в каждом ресурсе можно использовать перехватчик:

app.config(function($httpProvider) { 
    $httpProvider.interceptors.push(function($q) { 
     return { 
      'request': function(config) { 
      config.headers['auth-key'] = 'key'; 
       return $q.when(config); 
      } 
     }; 
    }); 
}); 
+0

Вам не нужны перехватчики, чтобы устанавливать заголовки по умолчанию. для этой цели существует свойство $ httpProvider.defaults.header. – dtabuenc

+0

Это лучший подход, если вы используете сторонние ресурсы, так как вы можете определить условия. – Fardin

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