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 🙂
Vous devez vous connecter pour publier un commentaire.
Non, vous n'avez pas à mettre des informations d'identification, Vous devez mettre des en-têtes sur le côté client, par exemple:
Et et sur le côté serveur, vous devez mettre des en-têtes c'est l'exemple de nodejs:
Pour faire de la SCRO demande, on doit ajouter des en-têtes de la requête avec le même dont il a besoin pour vérifier de mode_header est activé dans Apache.
Pour permettre des en-têtes dans Ubuntu:
Pour php serveur pour accepter la demande de différentes origines utilisation: