2016-06-15 1 views
0

トークンの有効期限が切れた後、トークンの有効期限を処理するインターセプタを作成したアプリケーションがあります。トークンの有効期限が切れた後にログインページにリダイレクトされますが、ログインページにリダイレクトした後のエラーを表示します。angeljs HTTPインターセプタがロードされたロケーションパスにエラーを表示する

私の質問は、インターセプタがアプリケーションをそのページにリダイレクトした後に、ログインページに期限切れのトークンエラーを表示するにはどうすればよいですか。

HERESに私のリダイレクタ:最後に

app 
    .config(['$httpProvider', function($httpProvider) { 
     $httpProvider.interceptors.push(function($q, $location, LoopBackAuth) { 
      return { 
       responseError: function(rejection) { 
        if (rejection.status == 401) { 
         //Now clearing the loopback values from client browser for safe logout... 
         LoopBackAuth.clearUser(); 
         LoopBackAuth.clearStorage(); 
         $location.path("/login"); 
        } 
        return $q.reject(rejection); 
       } 
      }; 
     }) 
    }]) 
    .config(function(LoopBackResourceProvider) {     
     LoopBackResourceProvider.setAuthHeader('X-Access-Token'); 
    }) 
+0

'/ login'パスはプライマリアプリケーションの一部ですか?同じindex.htmlを共有していますか?もしそうなら、あなたは '$ stateParams.error = 'Token expired''を使って他のページに遷移し、それをログインフォームの上にポップアップで表示することができます。また、エラーにurlパラメータを設定することもできます: '/ login?error = TokenExpired'。 – forrestmid

+0

@forrestmid私の他の問題は、anglejsの知識が不足しています...私はURLパラメータとしてエラーを送信しようとしましたが、ログインコントローラでスコープを設定しましたが、location.pathを実行しているときにそのエラーをテンプレートに反映できません'login')。search(params)。ただし、login?error = xxxxページを再読み込みする場合に限り、location.pathがそのページの取得要求を作成しなかったかのようになります。 – maumercado

+0

また、$ stateParamsをどのように移行して追加するのか分かりませんでしたが、試してみましたが、未定義のcant呼び出しメソッドの切り替えに遭遇しました...スコープはインターセプタのvarではないので...ここでもanglejsのナレッジは不足しています理由 – maumercado

答えて

0

と感謝が、これは私がやってしまったものです正しい方向に私を指すように@forrestmidします。 HTTPのインターセプター追加した上

$location.path("/login").search({error: 'invalid_token'}); 

してから、コントローラのちょうどしなければならなかった:

var queryString = $location.search(); 
$scope.errors = {}; 
if (queryString && queryString.error) { 
    $scope.errors = { 
     'invalid_token': { 
      code: 'invalid_token' 
     } 
    } 
} 

を今私はすでにので、今エラーオブジェクトを処理するためのロジックを持っているテンプレートにそれはうまく動作します:)

0

参照してくださいthis postについては、HTTPインターセプタに$ステートサービスを注入することについて:

何に設定のparamエラーが発生した場合、それはでき app.login状態に遷移するときにエラーが存在しませんデフォルトで

app.config(function($stateProvider){ 
    $stateProvider 
     .state("app",{abstract: true}) 
     .state("app.login", { 
      url: "/login", 
      params: {error: ""} 
     }); 
}); 

、しかし:

app.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push(function($q, $injector, LoopBackAuth) { 
     return { 
      responseError: function(rejection) { 
       if (rejection.status == 401) { 
        //Now clearing the loopback values from client browser for safe logout... 
        LoopBackAuth.clearUser(); 
        LoopBackAuth.clearStorage(); 
        $injector.get('$state').go('app.login', {error: 'Token expired.'}); 
       } 
       return $q.reject(rejection); 
      } 
     }; 
    }) 
}]); 

あなたがui.routerを使用していると仮定すると、エラーを表示します。これはログインページの$stateParams.error変数になります。

私はそれをテストしていないので、私はそのコードのいずれかに手を加えれば教えてください。あなたが望むと思うラインは$インジェクターラインです。

関連する問題