2017-01-10 17 views
0

Я построил отдых api, теперь пришло время обрабатывать данные с угловыми. Для этого я создал службу для подключения к моим ресурсам.Заголовки широковещательной передачи во все ресурсы после вызова другого ресурса

Так что я имею:

angular.module("myServiceRest", ['ngResource']) 

.factory("myService", function ($rootScope, $resource) { 



    var apiData = $resource(
     "/api", {}, 
     { 
      "getContains": {method: 'GET', isArray: false, url: "/api/users/:userid/:yearid/:groupeid/:levelid", headers: $rootScope.headers}, 
      "getContain": {method: 'GET', isArray: false, url: "/api/Contains/:containid", headers: $rootScope.headers}, 

      "postAuthTokens": {method: 'POST', url: "/api/auth-tokens"} 

     }); 

    return { 
     getGroupesContenus: function (user_id, year_id, groupe_id, level_id) { 
      return apiData.getContains({userid: user_id, yearid: year_id, groupeid: groupe_id, levelid: level_id}); 
     }, 
     getContain: function (contain_id) { 
      return apiData.getContain({containid: contain_id}); 
     }, 

     postAuthTokens: function(userData) { 
      apiData.postAuthTokens(userData, function (data) { 
       console.log("success !"); 
       $rootScope.headers = { 
        "Content-Type": "application/json", 
        "Authorization": "Basic ZWRnYXJrYW1kZW06TkVXVE9O", 
        "Accept": "application/json", 
        "X-Auth-Token": data.value 
       }; 
      }, function (error) { 
       console.log(error.data); 
      }) 

     } 
    } 
}); 

Вот у меня есть 3 ресурса:

  • getContains:/API/пользователей /: идентификатор пользователя /: yearid /: groupeid /: levelid
  • getContain :/апи/Содержит /: containid
  • postAuthTokens:/API/Auth-токены

Чтобы получить доступ к getContains и getContain (после входа в систему), пользователю необходимо установить токен (X-Auth-Token), полученный через postAuthTokens.

В основном, когда пользователь входит в систему, он вызывает ресурс POST postAuthTokens и извлекает свой токен (хранящийся в базе данных) через data.value и должен установить этот токен в X-Auth-Token, чтобы продолжить ,

Для этого я создал $ rootScope, и сразу же, когда пользователь получить войти, я установил:

$rootScope.headers = { 
       "Content-Type": "application/json", 
       "Authorization": "Basic ZWRnYXJrYW1kZW06TkVXVE9O", 
       "Accept": "application/json", 
       "X-Auth-Token": data.value //Set the user token 
      }; 

Но это не работает. Это как $ rootScope.headers получило после повторной инициализации вызова после идентификации лексем, потому что, когда журнал пользователя в I получил эту ошибку в моем Chrome консоли после:

angular.js:14328 Possibly unhandled rejection: {"data":{"error":{"code":500,"message":"Internal Server Error","exception":[{"message":"X-Auth-Token header is required","class":"Symfony\\Component\\Security\\Core\\Exception\\BadCredentialsException","trace":... 

Моих $ rootScope.headers не был установлены на всех.

Так как я могу транслировать мои $ rootScope.headers во все заголовки ресурсов после вызова postAuthTokens?

ответ

1

Вместо добавления заголовков в корневой сферы, добавьте их к $http службы:

$http.defaults.headers.common['X-Auth-Token'] = data.value

Затем они должны быть добавлены для всех последующих запросов HTTP автоматически

+0

Thx, это то, что я сделал и он работает – kabrice