2

これは単純なケースのように思えます: Angular 1.1.5 を使用して $http リクエストに OAuth ベアラー トークンを追加するリクエスト インターセプターを追加しようとしています。これが私のインターセプターです:

app.factory('bearerTokenInterceptor', function($injector, $q) {
  /*
   * This interceptor is available for providers that use the header based
   * bearer token for authentication
   */
  return {
    request: function(config) {
      /*
       * We need to use $injector to get access to the Token provider within
       * the body of the ctor - lest we want circular references created
       * by providers that need to use the interceptor (and also need the
       * Token provider
       */
      var Token = $injector.get('Token');
      config.headers.get = {'Authorization': 'Bearer ' + Token.get() };
      return config || $q.when(config);
    }
  };
});

その後

app.config(function(TokenProvider, YammerTokenVerifier, $httpProvider) {    
  TokenProvider.extendConfig({
    authorizationEndpoint: 'https://www.yammer.com/dialog/oauth',
    verifyFunc: YammerTokenVerifier
  });

  /*
   * Yammer uses a bearer token - in comes the BearerTokenInterceptor!
   */
  $httpProvider.interceptors.push('bearerTokenInterceptor');
});

しかし、実際に $http を使用すると

$http.get('https://www.yammer.com/api/v1/users/current.json')
  .success(function(data) {
    deferred.resolve(data);
  })
  .error(function(data, status, headers, config) {
    console.log(data);
    console.log(status);
    console.log(headers);
    console.log(config);
    deferred.reject(data);
  });

リクエストインターセプターが呼び出されていません。私がやっていることは、Angular のドキュメントが示唆するものを超えているとは思いません。私は何が欠けていますか?

4

1 に答える 1

4

私はあなたのコードを試しましたが、大丈夫です。実際に angular js を使用していることを確認する必要があります。1.1.5. これを試してください: https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js

以前のバージョンでは、$httpProvider.interceptorsが定義されておらず、呼び出そうとすると$httpProvider.interceptors.push('bearerTokenInterceptor');例外がスローされるためです。

フィドル

アップデート:

ファクトリを別のモジュールに登録する場合は、次のようなコードを使用してそのモジュールに依存関係を追加する必要があります。

 var app = angular.module('yourapp',['factoryModule']);
 app.config(function(TokenProvider, YammerTokenVerifier, $httpProvider) {    
    TokenProvider.extendConfig({
    authorizationEndpoint: 'https://www.yammer.com/dialog/oauth',
    verifyFunc: YammerTokenVerifier
  });

  $httpProvider.interceptors.push('bearerTokenInterceptor');
});
于 2013-10-05T06:34:52.523 に答える