AngularJS $http, de la SCRO et l'authentification http

Parce que l'utilisation de la SCRO et l'authentification http avec AngularJS peut être difficile, j'ai édité la question de partager appris la leçon. Tout d'abord je tiens à remercier igorzg. Sa réponse m'a beaucoup aidé. Le scénario est le suivant: Vous voulez envoyer une requête POST vers un autre domaine avec AngularJS $service http. Il y a plusieurs délicat de choses à connaître lors de l'obtention d'AngularJS et de la configuration de serveur.

Première:
Dans votre application de config, vous devez permettre à la croix-domaine d'appel

/**
 *  Cors usage example. 
 *  @author Georgi Naumov
 *  [email protected] for contacts and 
 *  suggestions. 
 **/ 
app.config(function($httpProvider) {
    //Enable cross domain calls
    $httpProvider.defaults.useXDomain = true;
});

Deuxième:
Vous devez spécifier withCredentials: vrai et le nom d'utilisateur et le mot de passe
demande.

 /**
  *  Cors usage example. 
  *  @author Georgi Naumov
  *  [email protected] for contacts and 
  *  suggestions. 
  **/ 
   $http({
        url: 'url of remote service',
        method: "POST",
        data: JSON.stringify(requestData),
        withCredentials: true,
        headers: {
            'Authorization': 'Basic bashe64usename:password'
        }
    });

Troisième:
L'installation du serveur. Vous devez fournir:

/**
 *  Cors usage example. 
 *  @author Georgi Naumov
 *  [email protected] for contacts and 
 *  suggestions. 
 **/ 
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: http://url.com:8080");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");

Pour chaque demande. Lorsque vous recevez OPTION, vous devez passer:

/**
 *  Cors usage example. 
 *  @author Georgi Naumov
 *  [email protected] for contacts and 
 *  suggestions. 
 **/ 
if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
   header( "HTTP/1.1 200 OK" );
   exit();
}

L'authentification HTTP et tout le reste vient après.

Ici est un parfait exemple de l'utilisation de la côté serveur avec php.

<?php
/**
 *  Cors usage example. 
 *  @author Georgi Naumov
 *  [email protected] for contacts and 
 *  suggestions. 
 **/ 
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: http://url:8080");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");

if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
   header( "HTTP/1.1 200 OK" );
   exit();
}


$realm = 'Restricted area';

$password = 'somepassword';

$users = array('someusername' => $password);


if (isset($_SERVER['PHP_AUTH_USER']) == false ||  isset($_SERVER['PHP_AUTH_PW']) == false) {
    header('WWW-Authenticate: Basic realm="My Realm"');

    die('Not authorised');
}

if (isset($users[$_SERVER['PHP_AUTH_USER']]) && $users[$_SERVER['PHP_AUTH_USER']] == $password) 
{
    header( "HTTP/1.1 200 OK" );
    echo 'You are logged in!' ;
    exit();
}
?>

Il y a un article sur mon blog à propos de ce problème qui peut être vu ici.

  • La question est édité.
  • Je suis un peu confus, c'est angularjs, mais vous l'avez enveloppé dans des balises PHP....ai-je raté quelque chose?
  • C'est juste un exemple de serveur de côté la logique. Le texte ci-dessous "le Troisième: l'installation du Serveur" est côté serveur logique.
  • AngularJS est pour le côté client. Cela peut parler à n'importe quel serveur, PHP, Ruby, Perl, Python, Java, JavaScript... je pourrais aller sur..
  • Est-ce une question? C'est plus comme une bonne réponse 🙂