Nella mia applicazione ho intercettato un intercettore che rileva la perdita di sessione (il server invia un HTTP 419). In questo caso, ho bisogno di richiedere una nuova sessione dal server, e quindi vorrei inviare nuovamente la richiesta originale automaticamente.
Forse potrei salvare la richiesta in un intercettore di richiesta, e quindi inviarlo di nuovo, ma potrebbe esserci una soluzione più semplice.Come posso inviare nuovamente la richiesta nell'interceptor di risposta?
Nota che per creare la sessione devo utilizzare uno specifico webservice.
angular.module('myapp', [ 'ngResource' ]).factory(
'MyInterceptor',
function ($q, $rootScope) {
return function (promise) {
return promise.then(function (response) {
// do something on success
return response;
}, function (response) {
if(response.status == 419){
// session lost
// create new session server-side
// Session.query();
// then send current request again
// ???
}
return $q.reject(response);
});
};
}).config(function ($httpProvider) {
$httpProvider.responseInterceptors.push('MyInterceptor');
});
Una nota per chi la guarda oggi: la sintassi di Angular per gli intercettori è cambiata dalla v1.1.x. La soluzione alla domanda è analoga, ma si dovrebbe vedere qui per la più recente sintassi: https://docs.angularjs.org/api/ng/service/$http#interceptors –
Ecco una versione semplificata di questo: http://stackoverflow.com/a/31965945/651556 – Sushil