Capture HTTP 401 con el interceptor Angular.js

Me gustaría implementar la autenticación en una aplicación web de una sola página con Angular.js. La documentación oficial de Angular recomienda el uso de interceptores:

$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { return { // ... 'responseError': function(rejection) { // do something on error if (canRecover(rejection)) { return responseOrNewPromise } return $q.reject(rejection); } }; }); 

El problema es cuando el servidor envía un error 401, el navegador se detiene inmediatamente con el mensaje “No autorizado”, o con la ventana emergente de inicio de sesión (cuando el servidor envía la autenticación HTTP), pero Angular no puede capturar con su interceptor el HTTP error al manejar, como se recomienda. ¿Estoy malentendiendo algo? Probé más ejemplos encontrados en la web ( esto , esto y esto, por ejemplo), pero ninguno de ellos funcionó.

en el bloque de configuración de la aplicación:

 var interceptor = ['$rootScope', '$q', "Base64", function(scope, $q, Base64) { function success(response) { return response; } function error(response) { var status = response.status; if (status == 401) { //AuthFactory.clearUser(); window.location = "/account/login?redirectUrl=" + Base64.encode(document.URL); return; } // otherwise return $q.reject(response); } return function(promise) { return promise.then(success, error); } }]; 

Para AngularJS> 1.3, use $httpProvider.interceptors.push('myHttpInterceptor');

 .service('authInterceptor', function($q) { var service = this; service.responseError = function(response) { if (response.status == 401){ window.location = "/login"; } return $q.reject(response); }; }) .config(['$httpProvider', function($httpProvider) { $httpProvider.interceptors.push('authInterceptor'); }]) 

No sé por qué, pero la respuesta con el error 401 entra en la función de éxito.

 'responseError': function(rejection) { // do something on error if (rejection.status == 401) { $rootScope.signOut(); } return $q.reject(rejection); }, 'response': function (response) { // do something on error if (response.status == 401) { $rootScope.signOut(); }; return response || $q.when(response); } 

Los interceptores AngularJS solo funcionan para las llamadas realizadas con el servicio $ http; si navega a una página que devuelve un 401, AngularJS nunca se ejecuta.