2014-06-14 3 views
2

J'essaie de me connecter à une API RESTFul sur un serveur domotique chez moi (une sécurité massive n'est donc pas nécessaire). Lorsque je tente de se connecter sans informations d'identification, je reçois:Authentification Angular Digest

[Error] XMLHttpRequest cannot load http://localhost:8176/devices/. Origin http://localhost is not allowed by Access-Control-Allow-Origin. 

La documentation dit:

Indigo utilise "digérer authentificaction" (pas de base ni jeton)

boucle -X PUT - -digest -u {nom d'utilisateur}: {mot de passe} -d valeur = {valeur} http: // {Adresse IP}: 8176/variables/{VariableToChange}

curl -X PUT --digest -u admin: p @ ssw0rd -d valeur = true http: // {adresse IP}: 8176/variables/Var1

Pour obtenir une liste des périphériques, je peux utiliser l'un de ces 3:

http://127.0.0.1:8176/devices/ 
http://127.0.0.1:8176/devices.xml/ 
http://127.0.0.1:8176/devices.txt/ 

Je suis à une perte totale sur la façon de passer les credos. Voici mon code jusqu'à présent:

function DeviceController($scope, $http) { 
    $http.get("http://localhost:8176/devices/") 
     .then(function (results) { 
      //Success; 
      console.log("Succss: " + results.status); 
      $scope.devices = results.data; 
     }, function (results) { 
      //error 
      console.log("Error: " + results.data + "; " 
            + results.status); 
      $scope.error = results.data; 
     }) 
}; 

Quelqu'un peut-il me diriger dans la bonne direction?

Merci

Mark

+0

Je pense serveur a besoin domotique autant de sécurité que vous pouvez penser. – icebreaker

+0

@icebreaker - pas quand il est sur un réseau local sécurisé – mark1234

Répondre

2

Votre serveur doit être configuré pour accepter CORS (Cross-origin resource sharing).

EDIT: Il semble que votre serveur Indigo (je ne sais pas de quoi il s'agit) ne soit pas celui qui sert votre application angulaire. Reportez-vous à la documentation de votre serveur pour savoir comment activer CORS.

En ce qui passe vos informations d'identification lors de votre demande, faites:

$http({ 
    method: "GET", 
    url: "http://localhost:8176/devices/", 
    headers: {"Authorization": "Basic " + btoa("admin:[email protected]")}, 
})... 
+0

@gframontina merci de répondre. Le serveur sera finalement apache sur OS X. Rigght maintenant je développe dans Visual Studio ainsi c'est le serveur Web d'asp. J'ai découvert que je devais utiliser l'autorisation digest, puis-je échanger "Basic" pour le résumé? (Je ne devine pas :-(. Observe Mark – mark1234

+0

Une recherche rapide pour angulaire + digest m'a donné quelques modules qui aident à faire face à l'ensemble du processus: [https://github.com/PatrickHeneise/angular-digest-interceptor ] (https://github.com/PatrickHeneise/angular-digest-interceptor) et [https://github.com/tafax/angular-digest-auth](https://github.com/tafax/angular-digest -auth) Je n'en ai utilisé aucun, mais ils semblent faciliter la tâche.En ce qui concerne la configuration de votre serveur pour activer CORS, je n'ai pas beaucoup d'expérience dans le monde .NET, mais je vous le garantis est possible. :-) – gtramontina

+0

merci pour la réponse J'ai désactivé l'authentification pour le moment, mais CORS me tue J'utilise VS pour développer, donc mon "serveur web" est le serveur web asp.net que VS commence pour le débogage, j'ai ajouté ceci à web.comfig, mais toujours pas de chance mark1234

Questions connexes