3

303 応答を返す $http.post を実行し、応答を返す get 呼び出しにリダイレクトする認証サービスを呼び出しています。

Postman を使用して post 呼び出しを行うと、目的の応答が得られますが、角度のある $http.post 呼び出しを行うと、401 エラーが返されます (これはユーザーが承認されていません)。

角度のある呼び出しを行っているときに何かが欠けていますか? Postman で正常に動作するため、バックエンド サービスは正常に動作しているようです。

$http 呼び出しは次のようになります。

$http.post(url, userData).success(function(data, status) {
   //handle success
}.error(function(data, status) {
   //handle error   
});

この場合、URL とユーザー データはまったく問題なく作成されます。

4

2 に答える 2

3

呼び出しを受ける理由GETは、angular がそれに到達する前にブラウザが 303 応答を処理するためです。処理シーケンスは、最初にブラウザーに移動し、次に角度フレームワークに移動します。

簡単に言えば、何が起こるかは次のとおりです。サーバーに電話をかけます->サーバーは303応答を返します->ブラウザーは303を処理し、いくつかのURLにリクエストを行います(応答ヘッダーの「場所」である必要があります)->サーバーはリクエストを受信し、401 承認済みの応答を返します --> 再びブラウザは最初に 401 応答を受信しますが、今回はブラウザが応答を angular にリダイレクトします --> 最後に 内のデータとステータスを受信できますerror()

locationこれに対する解決策は、2xx のような他の応答ステータス コードに切り替えることであり、本文から取得できます。その後、リダイレクトを手動で行うことができます。応答コードとして 303 またはその他の 3xx を使用する必要がある場合は、ブラウザーに対して多くのことを行うことができないため、現時点では効果的な解決策はないと思います。私の知る限り、ブラウザ レベルで解決策があるかもしれませんが、それがいつになるかはわかりません。

この問題が提起されてからほぼ1年が経ちましたが、これがこのような同様の問題を抱えている人に役立つことを願っています.

その他の参照: https://groups.google.com/forum/#!topic/angular/GKkdipdMbdo 上記のリンクから確認できる同様の解決策があります。

于 2014-08-14T13:57:57.073 に答える