AngularJS - http intercepteur - renvoyer tous demande après jeton d'actualisation

J'ai angulaire de l'app, qui parfois ne plusieurs $http.requêtes get par l'état. L'application usees JWT pour l'authentification de l'utilisateur avec l'actualisation des jetons. L'API serveur envoie 401 sur chaque demande qui a échoué en raison d'auth erreur.
J'ai fait une http interceptor que les demandes de un nouveau jeton d'actualisation jeton sur la 401 erreurs et après qui vous renvoie la demande d'origine.

Le problème est que, si un état fait par exemple, 2 $http.les requêtes get et les deux obtiennent une réponse 401 puis-je renouveler le jeton d'accès deux fois. Évidemment, je ne veux actualiser le jeton d'une fois, MAIS j'ai encore envie de le renvoyer à la FOIS les demandes ayant échoué.

Est-ce réalisable et si oui, comment?

app.factory('AuthInterceptor', function($q, $injector, RESOURCE_URL, API_BASE, authService) {
return {
request: function(config) {
config.headers = config.headers || {};
if (authService.getAccessToken()) {
if (config.url.substring(0, RESOURCE_URL.length) !== RESOURCE_URL) {
config.headers.Authorization = 'Bearer ' + authService.getAccessToken();
}
}
return config;
},
responseError: function(response) {
switch (response.status) {
case 401:
var deferred = $q.defer();
$injector.get("$http").post(API_BASE + '/api/auth/refresh', {refreshtoken: authService.getRefreshToken()}).then(function(r) {
if (r.data.data.accesstoken && r.data.data.refreshtoken && r.data.data.expiresin) {
authService.setAccessToken(r.data.data.accesstoken);
authService.setRefreshToken(r.data.data.refreshtoken);
authService.setExpiresIn(r.data.data.expiresin);
$injector.get("$http")(response.config).then(function(resp) {
deferred.resolve(resp);
},function(resp) {
deferred.reject();
});
} else {
deferred.reject();
}
}, function(response) {
deferred.reject();
authService.clear();
$injector.get("$state").go('guest.login');
return;
});
return deferred.promise;
break;
default:
authService.clear();
$injector.get("$state").go('guest.login');
break;
}
return response || $q.when(response);
}
};
});
  • vous pouvez poster l'extrait de code de votre intercepteur et comment vous renvoyer la demande?
  • ne stackoverflow.com/questions/18638211/... aider à répondre?
  • Je ne reçois pas une lib soit. Le event:auth-loginRequired serait encore le feu deux fois faire de l'app actualiser le jeton à deux reprises. Suis-je tort? Ce qui me manque?
InformationsquelleAutor Andrew | 2014-10-24