OAuth2トークンを送信するために、AngularJSのデフォルトヘッダーを次のように設定しています。
$http.defaults.headers.common['Authorization'] = 'Bearer ' + access_token;
これはうまく機能しますが、特定のリクエストに対してこのヘッダーは必要ありません(エラーが発生します)。
そのリクエストを実行するときにデフォルトヘッダーを除外する方法はありますか?
ありがとう!
Riron に感謝します。ここに答えがあります:
$http({
method: 'GET',
url: 'http://.../',
transformRequest: function(data, headersGetter) {
var headers = headersGetter();
delete headers['Authorization'];
return headers;
}
});
$ httpを使用して呼び出しを行う場合、デフォルトのヘッダーをリクエスト構成に直接指定することで、それらをオーバーライドできます。
_$http({method: 'GET', url: '/someUrl', headers: {'Authorization' : 'NewValue'} }).success();
_
それ以外の場合は、transformRequest
パラメーターを使用して、まだ$ http構成でリクエストを変換できます。ドキュメントを参照してください:
transformRequest –
{function(data,headersGetter)|Array.<function(data, headersGetter)>}
–変換関数またはそのような関数の配列。変換関数は、httpリクエストの本文とヘッダーを受け取り、変換された(通常はシリアル化された)バージョンを返します。
このようにして、1つの要求のヘッダーを送信前に削除できます。
_$http({method: 'GET',
url: '/someUrl',
transformRequest: function(data,headersGetter){ //Headers change here }
}).success();
_
後発者の場合、解決策は機能している可能性がありますが、実際には、transformRequestを使用する必要はありません。
$ httpサービスのAngular docsは、実際にこの正確な状況をカバーしています:
$ httpProvider.defaults.headersを介してリクエストごとに自動的に追加されたヘッダーを明示的に削除するには、headersプロパティを使用して、目的のヘッダーをndefinedに設定します。例えば:
var req = {
method: 'POST',
url: 'http://example.com',
headers: {
'Content-Type': undefined
},
data: {
test: 'test'
}
}
$http(req).success(function(){...}).error(function(){...});
Angular 1.4. はtransformRequest
を使用してリクエストヘッダーを変更できなくなりました。
ヘッダーを動的に追加/削除する必要がある場合は、ヘッダー関数で実行する必要があります。次に例を示します。
$http.get(url, {
headers: {
'X-MY_HEADER': function(config) {
return 'abcd'; //you've got access to a request config object to specify header value dynamically
}
}
})
$httpProvider
は$http
をオーバーライドできますが、intereceptors
の使用はこれを処理する1つの方法ですが、私はこのようにしてしまいます
function getMyStuff(blah) {
var req = {
method: 'GET',
url: 'http://...',
headers: {
'Authorization': undefined
}
}
return $http(req)
.then(function(response) {
return response.data;
});
}