2015-01-02 2 views
3

Я пытаюсь установить токен доступа в заголовок после успешного входа в систему. Я пытаюсь добиться этого с помощью ракеты-перехватчики, но получаю эту ошибку:

Uncaught Error: [$injector:unpr] Unknown provider: aProvider <- a <- TokenInterceptor <- $http <- $compile 

JS

myApp.config(['$httpProvider',function ($httpProvider) { 
    $httpProvider.interceptors.push('TokenInterceptor'); 
}]); 

myApp.factory('TokenInterceptor', function ($q, $window, $location, AuthenticationService) { 
    return { 
     request: function (config) { 
      config.headers = config.headers || {}; 
      if ($window.sessionStorage.token) { 
       config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token; 
      } 
      return config; 
     }, 

     requestError: function(rejection) { 
      return $q.reject(rejection); 
     }, 

     response: function (response) { 
      return response || $q.when(response); 
     }, 

     //Revoke client authentication if 401 is received 

     responseError: function(rejection) { 
      console.log("Rejecton !"); 
      console.log(rejection); 

      if (rejection != null && rejection.status === 401 && ($window.sessionStorage.token || AuthenticationService.isLogged)) { 
       console.log("Revoked !"); 
       delete $window.sessionStorage.token; 
       AuthenticationService.isLogged = false; 
       $location.path("/admin/login"); 
      } 

      return $q.reject(rejection); 
     } 
    }; 
}); 
+0

похоже, что проблема вызвана мини-версией, используете ли вы 'ng-annotate' для обработки вашего источника до обнуления? – elaijuh

ответ

5
yApp.config(['$httpProvider', function ($httpProvider) { 

    var interceptor = ['$q', '$window', '$location', '$injector', function($q, $window, $location, $injector) { 

     return { 
      request: function (config) { 
       config.headers = config.headers || {}; 
       if ($window.sessionStorage.token) { 
        config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token; 
       } 
       return config; 
      }, 

      requestError: function(rejection) { 
       return $q.reject(rejection); 
      }, 

      response: function (response) { 
       return response || $q.when(response); 
      }, 

      // Revoke client authentication if 401 is received 

      responseError: function(rejection) { 
       console.log(rejection); 
       // Dynamically get the service since they can't be injected into config 
       var AuthenticationService = $injector.get('AuthenticationService'); 

       if (rejection != null && rejection.status === 401 && ($window.sessionStorage.token || AuthenticationService.isLogged)) { 
        delete $window.sessionStorage.token; 
        AuthenticationService.isLogged = false; 
        $location.path("/login"); 
       } 

       return $q.reject(rejection); 
      } 
     }; 
    }]; 

    $httpProvider.interceptors.push(interceptor); 
}]); 
0

когда вы уродовать источник, TokenInterceptor разрешен к a, который не может можно найти в угловом контексте.

вы можете использовать ng-annotate предварительно обработать ваш источник, прежде чем уродовать, он будет автоматически конвертировать код srouce использовать явные аннотации (массив) стиль myApp.factory('TokenInterceptor', ['$q', '$window', '$location', 'AuthenticationService', function ($q, $window, $location, AuthenticationService){...}]) быть минимизирован безопасной

ng-annotate имеет grunt и gulp плагин, а также

Смежные вопросы