3

インターセプターを使用して、すべての GET/POST 要求に「Authorization」ヘッダーを追加しようとしています。インターセプターは次のとおりです。

myApp.factory('httpRequestInterceptor', ['$rootScope', function ($rootScope) {
  return {
    request: function ($config) {
        $config.headers['Authorization'] = 'Basic ' + $rootScope.apiKey;
        return $config;
    }
  };
}]);

インターセプターは、myApp.config 部分で次のようにメイン モジュールで使用されています。

$httpProvider.interceptors.push('httpRequestInterceptor');

何らかの理由で、[ネットワーク] タブ (Chrome を使用しています) に Authorization ヘッダーが表示されず、サーバーにアクセスできず、エラーも発生しません。私のアプリケーションの GET/POST 要求は、私のドメインにないリモート サーバーに対するものです。

ここで何が間違っているのですか?

解決策: 問題を発見しました。それはサーバー側にありました - どうやら Access-Control-Allow-Headers を * への応答に設定しても機能しませんが、ヘッダーを文字どおりに指定すると問題なく機能します。

4

4 に答える 4

1

問題はサーバー側にありました-明らかに*への応答でAccess-Control-Allow-Headersを設定しても機能しませんでしたが、必要なものに文字通りヘッダーを指定する(Access-Control-Allow-Headers: Authorization)は問題なく機能します.

于 2015-07-01T11:16:09.633 に答える
0

に変えた方がいいと思います

 myApp.factory('httpRequestInterceptor', ['$rootScope', function ($rootScope) {
    var injector = {
        request: function (config) {
               config.headers['Authorization'] = 'Basic ' + $rootScope.apiKey;
               return config;
        }
    };
   return injector;
    } ]);

このウェブサイトのように試してください

于 2015-07-01T05:29:33.710 に答える
0

以下を使用できます。

myApp.run([
  '$http', '$rootScope',
  function($http, $rootScope) {
    $http.defaults.headers.common['Authorization'] = 'Basic ' + $rootScope.apiKey;
  }
]);
于 2015-07-01T06:39:32.020 に答える