2016-03-23 7 views
0

私はアングルアプリに次の工場を持っています。これは、$ resourceを使用して、発信しているすべての要求のヘッダにベアラトークン情報を追加するために使用されます。それは期待どおりに動作します。Interceptor in Angular、いくつかのコールのみですか?

しかし、私はいくつかの外部呼び出しを実装しました。これは、ベアラトークンで追加するべきではありません。どのように私は小切手を実装するので、私はどのような呼び出しが傍受され、どのようなものを制御することができますか?

マイコード:

.factory('authInterceptor', [ 
     "$q", "$window", "$location", "currentUser", function ($q, $window, $location, currentUser) { 
      return { 
       request: function(config) { 
        config.headers = config.headers || {}; 
        config.headers.Authorization = 'Bearer ' + currentUser.getProfile().token; 
        return config; 
       }, 
       response: function(response) { 
        return response || $q.when(response); 
       }, 
       responseError: function(rejection) { 
        // error handler 
       } 
      }; 
     } 
    ]) 

authInterceptorを追加します。

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

工場のリソースのため:

myApp.factory('Random', function ($resource) { 
    return $resource('domain.com', { }, { 
     update: { 
      method: 'PUT' 
     } 
    }); 
}); 

リソースを呼び出します。

Random.query({ }); 

アイデア

答えて

2

を使用すると、不要なURLの改造をスキップします、その条件と

.factory('authInterceptor', [ 
      "$q", "$window", "$location", "currentUser", function ($q, $window, $location, currentUser) { 
       return { 
        request: function(config) { 
if(config.url !== 'external url') { 
         config.headers = config.headers || {}; 
         config.headers.Authorization = 'Bearer ' + currentUser.getProfile().token; 
} 
         return config; 
        }, 
        response: function(response) { 
         return response || $q.when(response); 
        }, 
        responseError: function(rejection) { 
         // error handler 
        } 
       }; 
      } 
     ]) 

、たとえば、あなたがリクエストオブジェクトで何かを行うことができます多くの方法があります。
もチェックしてください。 https://docs.angularjs.org/api/ng/service/ $ http#usage すべての通話のキーを作成して、インターセプトをオン/オフに切り替えることもできます。

関連する問題