問題タブ [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.
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
バグがどこにあるのかわかりません。サーバーでヘッダー応答を設定しましたが、コンソールでまだこのエラーが発生します。ありがとう
angularjs - インターセプターの無限ループ
API で動作する AngularJS Web サイトを作成しました。この API は、認証 (Oauth) などのいくつかの機能を提供します。
API が 401 エラーを返した場合は、 のaccess_token
有効期限が切れており、 で更新する必要があることを意味しrefresh_token
ます。
AngularJS でインターセプターを作成しました。その目的は、API によって返された結果が 401 エラーであるかどうかを確認することです。その場合は、トークンを更新してから、以前に拒否された要求を処理する必要があります。
問題は、インターセプターが無限ループを作成することです。最初のリクエストが 2 回失敗すると、停止するはずですが、停止しません。
したがって、このコード:
- 最初のリクエストが失敗したときに開始
- トークンをリフレッシュします
- リクエストを再試行しますが、再び失敗します (<- ここで停止させたいだけです)
- トークンをリフレッシュします
- リクエストを再試行しますが、再び失敗します
- トークンをリフレッシュします
- リクエストを再試行しますが、再び失敗します
- 等...
angularjs - Typescript を使用した Angular: HTTP インジェクター ファクトリーとサービスの比較
HTTP インジェクターとして使用したい Typescript クラス (コードを参照...) を作成しました。これはサービスとして (ファクトリではなく) Angular モジュールに追加されています。いくつかの問題に気づきました。
- クラスが「request」関数と「response」関数を大文字で定義すると、インジェクターは機能しません (これらの関数は呼び出されません)。小文字で定義すると、それらが呼び出されます。
- 関数が正しく呼び出されると、"this" オブジェクトはオブジェクトではなくグローバル ウィンドウを参照します。
真のファクトリーを作成し(コードを参照...)、それをAngularモジュールにファクトリーとして追加することで問題を解決しました。
ただし、なぜこれが起こっているのかを理解したいと思います。何かご意見は?
「リクエスト」と「レスポンス」に注目してください。前者が呼び出されます。後者はしません。
angularjs - Angular JS - すべての GET/POST リクエストにカスタム ヘッダーを追加する
インターセプターを使用して、すべての GET/POST 要求に「Authorization」ヘッダーを追加しようとしています。インターセプターは次のとおりです。
インターセプターは、myApp.config 部分で次のようにメイン モジュールで使用されています。
何らかの理由で、[ネットワーク] タブ (Chrome を使用しています) に Authorization ヘッダーが表示されず、サーバーにアクセスできず、エラーも発生しません。私のアプリケーションの GET/POST 要求は、私のドメインにないリモート サーバーに対するものです。
ここで何が間違っているのですか?
解決策: 問題を発見しました。それはサーバー側にありました - どうやら Access-Control-Allow-Headers を * への応答に設定しても機能しませんが、ヘッダーを文字どおりに指定すると問題なく機能します。
angularjs - 角度インターセプターは拒否されません
$resource
いくつかの API を呼び出します。何らかのフラグを返す場合、リクエストは.catch()
のセクションにドロップする必要があります$resource('api/').get(...).$promise.catch();
私のインターセプターはその呼び出しをトリガーしません。.then
いずれにせよ呼び出す
インターセプター コード:
同じ応答を取得する方法はありますが、すべての要求でエラーをチェックせずに catch セクションに入れますか?