2015-11-27 5 views
1

У меня есть отдых api. Некоторые действия контроллера api защищены. Они используют HTTP-заголовок аутентификации.Angularjs настроенный http-сервис

 var options = { 
      method: 'GET', 
      url: apiEndPoint.concat("/Message/GetMessages"), 
      headers: { 
       'Authorization': "BEARER ".concat(authorizationService.getAccessToken()) 
      } 
     }; 

     return $http(options).then(onMessageGetSuccess).catch(onMessageGetFailed); 

Так что я использую headers:{"Authorization":"...} всю охраняемую конечную точку отдыха.

Я хочу, чтобы создать настраиваемую службу HTTP с именем securedHttp которые включают в себя:

headers: { 
      'Authorization': "BEARER ".concat(authorizationService.getAccessToken()) 
     } 

Как я могу настроить службу HTTP.

angular.service("securedHttp",function(){}) 
+0

Индивидуальные средства обслуживания вам нужно создать его как отдельную службу и вызвать из других контроллеров? –

+0

Я думаю, вам нужно [$ http interceptor] (https://thinkster.io/interceptors) – themyth92

ответ

0

HTTP-перехватчик будет хорошим подходом здесь. В принципе, это способ сказать «сделать это до всех $ http-запросов».

Что-то, как это должно работать:

$httpProvider.interceptors.push(function(authorizationService) { 
    return { 
    'request': function(config) { 
     if (needsAuthorization(config)) { 
     config.headers.Authorization = "BEARER ".concat(authorizationService.getAccessToken()); 
     } 
     return config; 
    } 
    }; 
}); 

Смотрите the docs для получения дополнительной информации.

+0

Но это применимо ко всем HTTP-запросам. Я хочу применить заголовок авторизации к (/ DeleteProduct/5). Но (/ GetAll /) не будет использовать токен авторизации. – barteloma

+0

Вы можете посмотреть объект 'config' и выборочно добавить заголовок авторизации (я обновил свой ответ). –

0

Я хотел бы предложить вам использовать $ httpProvider.interceptors с таможенной службой

https://docs.angularjs.org/api/ng/service/ $ HTTP

В приведенном ниже примере я держать маркер в сервисе $ CookieStore

Создать authInterceptor службы (завод)

app.factory('authInterceptor', authInterceptor); 

function authInterceptor($cookieStore){ 
    return { 
    request: function(config){ 
     config.headers = config.headers || {}; 
     if($cookieStore.get('token')){ 

     config.headers.Authorization = 'Bearer ' + $cookieStore.get('token'); 
     } 
    }, 
    responseError: function(response){ 

     if(response.status === 401){ 
     // do something when user try to call api without authentication 
     } 
    } 
    } 
}); 

, а затем нажмите эту услугу в $ httpProvider.interceptors, как это

app.config(function($httpProvider){ 
    $httpProvider.interceptors.push('authInterceptor'); 
}); 

Теперь, если ваше приложение найдено маркер будет ключ авторизации прилагается к заголовку HTTP

Надеется, что это помогает.