0

Ich baute eine Ruhe-API, jetzt ist es an der Zeit, Daten mit eckigen zu behandeln. Um dies zu tun, baute ich einen Dienst, um eine Verbindung zu meinen Ressourcen herzustellen.Broadcast-Header an alle Ressourcen nach dem Aufruf einer anderen Ressource

So habe ich:

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); 
      }) 

     } 
    } 
}); 

Hier habe ich drei Quellen:

  • getContains:/api/users /: Benutzer-ID /: yearid /: groupeid /: levelid
  • getContain :/api/Enthält /:
  • postAuthTokens containid:/api/auth-Token

Um Zugriff auf getContains und getContain (nach dem Einloggen) zu erhalten, muss der Benutzer ein Token (X-Auth-Token) setzen, das über postAuthTokens abgerufen wird.

Wenn der Benutzer sich anmeldet, ruft er die POST-Ressource postAuthTokens auf und ruft sein Token (gespeichert in einer Datenbank) über data.value ab und muss dieses Token in X-Auth-Token setzen, um fortzufahren .

Dafür habe ich ein $ rootScope, und sofort, wenn der Benutzer in erhalten einzuloggen, ich gesetzt:

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

Aber es überhaupt nicht funktioniert. Es ist wie $ rootScope.headers bekam Reinitialize nach Post Auth-Token Aufruf, weil, wenn der Benutzer Anmeldung ich diesen Fehler habe in meinem Chrome-Konsole danach:

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":... 

My $ rootScope.headers nicht gesetzt wurde.

Wie kann ich meine $ rootScope.headers nach Aufruf von postAuthTokens an alle Ressourcenheader senden?

Antwort

1

Statt die Header an den Stammbereich des Hinzufügens, fügen sie dem $http Service:

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

Sie sollten dann auf alle nachfolgenden HTTP-Anfragen

+0

Thx automatisch hinzugefügt werden, ist es, was ich tat und es funktioniert – kabrice

Verwandte Themen