2017-05-01 20 views
0

私はUdemyのAngular and Auth0ビデオを使って認証を学んでいます。Auth0の循環依存性エラー

angular.js:66 Uncaught Error: [$injector:cdep] Circular dependency found: auth <- redirect <- $http <- auth 

そして、ここで私の角度設定です:

私は401エラーを処理していると私は次のエラーを受信して​​いますポイントに得ているので、

angular.config(config); 

function config($provide, authProvider, 
    $urlRouterProvider, $stateProvider, $httpProvider, jwtInterceptorProvider) { 

    authProvider.init({ 
     domain: 'cmckinstry.auth0.com', 
     clientId: 'Rmdm7tgPIWv1e1P6sKrBDoW8zI4kuOEa' 
    }); 

    jwtInterceptorProvider.tokenGetter = function(store) { 
     return store.get('id_token'); 
    } 

    $urlRouterProvider.otherwise('/home'); 

    $stateProvider 
     .state('home', { 
     url: '/home', 
     templateUrl: 'components/home/home.tpl.html' 
     }) 
     .state('profile', { 
     url: '/profile', 
     templateUrl: 'components/profile/profile.tpl.html', 
     controller: 'profileController as user' 
     }); 

    function redirect($q, $injector, auth, store, $location) { 
     return { 
     responseError: function(rejection) { 
      if (rejection.status === 401) { 
      auth.signout(); 
      store.remove('profile'); 
      store.remove('id_token'); 
      $location.path('/home'); 
      } 
      return $q.reject(rejection); 
     } 
     } 
    } 

    $provide.factory('redirect', redirect); 

    $httpProvider.interceptors.push('redirect'); 
    $httpProvider.interceptors.push('jwtInterceptor'); 
    } 

redirect機能からの注入を取り出す。しかし、リダイレクトは正しく機能しません。私はこれがauthProviderと何か関係があると思っていますが、私はそれを理解できないようです。エラーメッセージで

+0

なぜ '$ injector'サービスを使用しないときに' redirect'関数にインクルードしましたか? – georgeawg

答えて

0

ルック:エラーメッセージで述べたようauthProvider次いでauthProviderの円を完成redirectProviderを使用httpProviderを使用するため

Circular dependency found: auth <- redirect <- $http <- auth

、循環依存が形成されています。

円を壊すには、authをredirectProvider構築関数に依存として挿入しないでください。 $injector serviceを使用して、必要に応じてauthサービスを注入します。

$provide.factory('redirect', redirect); 
$httpProvider.interceptors.push('redirect'); 

//function redirect($q, $injector, auth, store, $location) { 
function redirect($q, $injector, store, $location) { 
    return { 
    responseError: function(rejection) { 
     if (rejection.status === 401) { 
     //INJECT HERE 
     var auth = $injector.get("auth"); 
     auth.signout(); 
     store.remove('profile'); 
     store.remove('id_token'); 
     $location.path('/home'); 
     } 
     return $q.reject(rejection); 
    } 
    } 
}