問題タブ [angular-http-interceptors]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
258 参照

angularjs - http リクエストの Elgg ヘッダーは許可されていません

AngularJS でフロントエンド アプリケーションを開発しています。elgg プラットフォームにログインしようとしています。HMAC 認証を使用する場合は、こちらのドキュメントで説明されているように、いくつかのカスタム ヘッダーを追加する必要があります。AngularJS では、インターセプターを使用しました。

しかし、私が得た応答は次のとおりです。

XMLHttpRequest cannot load http://localhost/elgg-1.9.8/elgg-1.9.8/services/api/rest/xml/?method=auth.gettoken. Request header field X- Elgg-hmac-algo is not allowed by Access-Control-Allow-Headers.

localhost の Web サーバーに Apache があり、次のように構成しました。
<Directory /> Header always set Access-Control-Allow-Origin "*" Header always set Access-Control-Request-Headers "*" Header always set Access-Control-Request-Method "*" AllowOverride none Require all denied </Directory>

また、応答ヘッダーとこれを確認しました: HTTP/1.1 200 OK Date: Sat, 30 May 2015 13:37:07 GMT Server: Apache/2.4.10 (Unix) OpenSSL/1.0.1j PHP/5.6.3 mod_perl/2.0.8-dev Perl/v5.16.3 Access-Control-Allow-Origin: * Access-Control-Request-Headers: * Access-Control-Request-Method: * X-Powered-By: PHP/5.6.3 Cache-Control: no-cache, must-revalidate Expires: Fri, 05 Feb 1982 00:00:00 -0500 Vary: Accept-Encoding,User-Agent Content-Encoding: gzip Content-Length: 81 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=UTF-8

バグがどこにあるのかわかりません。サーバーでヘッダー応答を設定しましたが、コンソールでまだこのエラーが発生します。ありがとう

0 投票する
1 に答える
4529 参照

angularjs - インターセプターの無限ループ

API で動作する AngularJS Web サイトを作成しました。この API は、認証 (Oauth) などのいくつかの機能を提供します。

API が 401 エラーを返した場合は、 のaccess_token有効期限が切れており、 で更新する必要があることを意味しrefresh_tokenます。

AngularJS でインターセプターを作成しました。その目的は、API によって返された結果が 401 エラーであるかどうかを確認することです。その場合は、トークンを更新してから、以前に拒否された要求を処理する必要があります。

問題は、インターセプターが無限ループを作成することです。最初のリクエストが 2 回失敗すると、停止するはずですが、停止しません。

したがって、このコード:

  • 最初のリクエストが失敗したときに開始
  • トークンをリフレッシュします
  • リクエストを再試行しますが、再び失敗します (<- ここで停止させたいだけです)
  • トークンをリフレッシュします
  • リクエストを再試行しますが、再び失敗します
  • トークンをリフレッシュします
  • リクエストを再試行しますが、再び失敗します
  • 等...
0 投票する
1 に答える
740 参照

angularjs - Typescript を使用した Angular: HTTP インジェクター ファクトリーとサービスの比較

HTTP インジェクターとして使用したい Typescript クラス (コードを参照...) を作成しました。これはサービスとして (ファクトリではなく) Angular モジュールに追加されています。いくつかの問題に気づきました。

  1. クラスが「request」関数と「response」関数を大文字で定義すると、インジェクターは機能しません (これらの関数は呼び出されません)。小文字で定義すると、それらが呼び出されます。
  2. 関数が正しく呼び出されると、"this" オブジェクトはオブジェクトではなくグローバル ウィンドウを参照します。

真のファクトリーを作成し(コードを参照...)、それをAngularモジュールにファクトリーとして追加することで問題を解決しました。

ただし、なぜこれが起こっているのかを理解したいと思います。何かご意見は?

「リクエスト」と「レスポンス」に注目してください。前者が呼び出されます。後者はしません。

0 投票する
4 に答える
5280 参照

angularjs - Angular JS - すべての GET/POST リクエストにカスタム ヘッダーを追加する

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

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

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

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

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

0 投票する
1 に答える
108 参照

angularjs - 角度インターセプターは拒否されません

$resourceいくつかの API を呼び出します。何らかのフラグを返す場合、リクエストは.catch()のセクションにドロップする必要があります$resource('api/').get(...).$promise.catch();

私のインターセプターはその呼び出しをトリガーしません。.thenいずれにせよ呼び出す

インターセプター コード:

同じ応答を取得する方法はありますが、すべての要求でエラーをチェックせずに catch セクションに入れますか?