Pour l'envoi du jeton OAuth2, je configure l'en-tête par défaut sur AngularJS comme ceci:
$http.defaults.headers.common['Authorization'] = 'Bearer ' + access_token;
Cela fonctionne très bien, mais je n’ai pas besoin de cet en-tête (je reçois une erreur) pour une requête spécifique.
Existe-t-il un moyen d’exclure l’en-tête des valeurs par défaut lors de l’exécution de cette demande?
Merci!
Merci à Riron de m'avoir mis sur le droit chemin. Voici la réponse:
$http({
method: 'GET',
url: 'http://.../',
transformRequest: function(data, headersGetter) {
var headers = headersGetter();
delete headers['Authorization'];
return headers;
}
});
Lorsque vous effectuez votre appel avec $ http, vous pouvez remplacer les en-têtes par défaut en les fournissant directement dans la configuration de votre demande:
$http({method: 'GET', url: '/someUrl', headers: {'Authorization' : 'NewValue'} }).success();
Sinon, vous pourriez transformer votre demande en utilisant le paramètre transformRequest
, toujours dans votre config $ http. Voir doc:
transformRequest -
{function(data,headersGetter)|Array.<function(data, headersGetter)>}
- transformation ou un tableau de ces fonctions. La fonction de transformation prend Le corps de la requête http et les en-têtes et renvoie sa version transformée (Généralement sérialisée).
De cette façon, vous pouvez supprimer un en-tête pour une requête unique avant son envoi:
$http({method: 'GET',
url: '/someUrl',
transformRequest: function(data,headersGetter){ //Headers change here }
}).success();
Pour les retardataires, même si la solution a peut-être fonctionné, vous ne devriez en fait pas avoir besoin d'utiliser transformRequest pour cela.
Les documents Angular du service $ http traitent en fait de cette situation:
Pour supprimer explicitement un en-tête ajouté automatiquement via $ HttpProvider.defaults.headers par requête, utilisez la propriété headers , En définissant l'en-tête souhaité sur undefined . Par exemple:
var req = {
method: 'POST',
url: 'http://example.com',
headers: {
'Content-Type': undefined
},
data: {
test: 'test'
}
}
$http(req).success(function(){...}).error(function(){...});
Angular 1.4.0 ne peut plus modifier les en-têtes de requête à l'aide de transformRequest
:
Si vous devez ajouter/supprimer des en-têtes de manière dynamique, vous devez utiliser une fonction d’en-tête , Par exemple:
$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
}
}
})
Alors que $httpProvider
peut remplacer $http
l'utilisation de intereceptors
est un moyen de gérer cela, je finis par le faire de cette façon
function getMyStuff(blah) {
var req = {
method: 'GET',
url: 'http://...',
headers: {
'Authorization': undefined
}
}
return $http(req)
.then(function(response) {
return response.data;
});
}