2016-08-11 8 views
0

私の現在のモジュール/コンポーネントベースのアーキテクチャでは、すべてresponseErrorsをAPI呼び出しから傍受しています。401 Unauthorizedに出くわしたら、ログアウトページにリダイレクトします。イベントをどこに入れるか

私の現在のコードは次のとおりです。

angular 
    .module('core') 
    .factory('authHTTPInterceptor', authHTTPInterceptor) 
    .config(['$httpProvider', function($httpProvider) { 
     $httpProvider.interceptors.push('authHTTPInterceptor'); 
    }]); 

function authHTTPInterceptor($rootScope) { 
    return { 
     'responseError': function (response) { 
      console.log(response.status); 
      if (response.status == 401) 
       redirectToLogout(); 
      return response; 
     } 
    }; 

    function redirectToLogout() { 
     window.location.href = 'logout.html'; 
    } 
} 

私は別のエンティティにredirectToLogoutロジックを移動し、これを適切ロジック分離し、ユニットテストを維持するためにunathorizedイベントを発するようにしたいです。

私の質問は、どの角度エンティティがそのようなイベントを待ち受けるべきなのかです。このモジュールのコントローラ、または<redirectListener></redirectListener>のようなhtmlコードに入れられたコンポーネントなどがありますか?または、ちょうどredirectorサービスを作成してここに挿入する必要がありますか?これには何がベストプラクティスですか?

答えて

1

これは私たちが従うものです。

jsを使用してurlをlogout.htmlにリダイレクトする代わりに、1つのルートを定義することができます。

.state('logout', { 
    url: '/logout', 
    controller: 'LogoutController', 
    templateUrl: "/logout.html", 
    access: 0 
}) 

そして、あなたのコードを追加することができます。

誰かが権限を持たない場合は、どのモジュールからでも特定のURLにリダイレクトされ、ログアウトロジックは1つのコントローラになります。

関連する問題