基本認証を使用しているAngularJS Webアプリがあります。これはうまく機能しますが、ユーザーが間違った電子メールまたはパスワードを入力したときに、適切なエラー メッセージを表示したいと考えています。したがって、ここで説明したような理由句で 401 を返します。
これは正常に機能し、理由句を含む 401 が正しく返されます。ただし、Angular の $http を使用すると、401 ではなくステータス コード 0 で応答が解釈されます。さらに、ユーザーに伝えたいという理由を読み取る機会がありません。例えば。不明な電子メールまたは間違ったパスワード。
私はこれを Chrome と Firefox でテストし、何の答えも見つからずにたくさんの質問を閲覧してきました。次のような応答インターセプターを実装しました。
$httpProvider.responseInterceptors.push(function ($timeout, $q) {
return function (promise) {
return promise.then(function (successResponse) {
if (successResponse.config.method.toUpperCase() != 'GET')
showMessage('Success', 'successMessage', 5000);
return successResponse;
}, function (errorResponse) {
console.log("status: " + errorResponse.status, errorResponse.config);
switch (errorResponse.status) {
case 0:
case 401:
showMessage('Wrong email or password', 'errorMessage', 20000);
break;
case 403:
showMessage('You don\'t have the right to do this', 'errorMessage', 20000);
break;
case 500:
showMessage('Server internal error: ' + errorResponse.data, 'errorMessage', 20000);
break;
default:
showMessage('Error ' + errorResponse.status + ': ' + errorResponse.data, 'errorMessage', 20000);
}
return $q.reject(errorResponse);
});
};
});
インターセプターをデバッグするときは機能しますが、ステータス コードは決して 401 ではなく、代わりに 0 になります。Chrome コンソールでは、次のように表示されます。
XMLHttpRequest cannot load http://localhost:64044/api/user/login/. Origin
http://localhost:63546 is not allowed by Access-Control-Allow-Origin.
これを機能させるチャンスはありますか?