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?
Thx automatisch hinzugefügt werden, ist es, was ich tat und es funktioniert – kabrice