AngularJS de la SCRO demande en-tête personnalisé
Je vais avoir de la difficulté à obtenir de la SCRO activé sur mon serveur en combinaison avec AngularJS. Je suis en utilisant Angulaire 1.2.16 et c'est mon server config:
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Content-Type, X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name, Authorization"
Header set Access-Control-Allow-Methods "POST, GET, PUT, DELETE, OPTIONS"
Header set Access-Control-Allow-Credentials "true"
Je peux utiliser la requête suivante:
$http.post(configuration.authUrl, {username: 'username', password: 'password'})
.success(function (data) {
$cookieStore.put(configuration.sessionName, {
token: data.authenticationToken,
user: data.user
});
})
.error(function () {}));
depuis cette demande n'est pas utiliser un en-tête personnalisé.
Quand j'ai ensuite essayer de demander le suivant:
Balance.get()
avec Solde:
angular.module('portalApp')
.factory('Balance', ['$resource', 'Auth', 'configuration', function ($resource, Auth, configuration) {
return $resource(configuration.balanceUrl, {}, {
get: {
method: 'GET',
isArray: false,
headers: {
Authorization: Auth.getAuthToken()
}
}
});
}]);
- Je obtenir un 401 Unauthorized
sur le balanceUrl.
Dans la config j'ai mis:
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
J'ai même essayé de mettre $http.defaults.headers.common.Authorization = Auth.getAuthToken();
avant la $resource
dans le Balance
des ressources de l'usine, mais cela n'a pas aidé.
Les en-têtes envoyés pour le contrôle en amont OPTIONS
demande, n'ont pas le Authorization
en-tête, peu importe la méthode que j'utilise. Ce sont les en-têtes de demande de contrôle en amont OPTIONS
demande.
OPTIONS /api/v1.0/user/orders HTTP/1.1
Host: host
Connection: keep-alive
Cache-Control: no-cache
Access-Control-Request-Method: GET
Pragma: no-cache
Origin: origin
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
Access-Control-Request-Headers: accept, authorization
Accept: */*
Referer: referer
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Des suggestions?
OriginalL'auteur mmjmanders | 2014-06-23
Vous devez vous connecter pour publier un commentaire.
Comme je sais que vous ne pouvez pas utiliser
Access-Control-Allow-Origin "*"
avecAccess-Control-Allow-Credentials "true"
.OriginalL'auteur Miraage
Après beaucoup de recherche j'ai trouvé le problème n'était pas produit en raison de la AngularJS ou de configuration d'Apache. C'était un problème dans le serveur d'arrière-plan de l'application (Java). Les url ont été limitées pour toutes les méthodes HTTP, donc quand AngularJS veut exécuter le contrôle en amont
OPTIONS
demande, l'accès a été refusé et une401
a été retourné.Cela a été résolu en faisant:
Au lieu de:
OriginalL'auteur mmjmanders
Pourquoi pas, de façon anonyme (ne pas effectuer l'authentification ou l'autorisation) laisser les options pré-vol à la demande.
https://stackoverflow.com/a/21458845/101662
Sonnaient les options n'était pas bien?
OriginalL'auteur Oliver
Je suis en utilisant une approche très différente, mais le principe est toujours le même.
D'abord, essayez de mettre au Porteur en face de votre jeton d'accès:
Si pas, essayez ceci:
app.config peut ne pas fonctionner si vous n'avez pas l'application définie comme une variable, de sorte que vous devrez peut-être ajuster.
OriginalL'auteur Chris Southam