Karena menggunakan otentikasi CORS dan http dengan AngularJS bisa rumit, saya mengedit pertanyaan untuk berbagi satu pelajaran yang dipelajari. Pertama saya ingin berterima kasih kepada igorzg. Jawabannya sangat membantu saya. Skenarionya adalah sebagai berikut: Anda ingin mengirim permintaan POST ke domain yang berbeda dengan layanan AngularJS $ http. Ada beberapa hal rumit yang harus diperhatikan saat mendapatkan AngularJS dan penyiapan server.
Pertama: Dalam konfigurasi aplikasi Anda, Anda harus mengizinkan panggilan lintas domain
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com for contacts and
* suggestions.
**/
app.config(function($httpProvider) {
//Enable cross domain calls
$httpProvider.defaults.useXDomain = true;
});
Kedua: Anda harus menentukan withCredentials: true dan nama pengguna dan kata sandi yang diminta.
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com for contacts and
* suggestions.
**/
$http({
url: 'url of remote service',
method: "POST",
data: JSON.stringify(requestData),
withCredentials: true,
headers: {
'Authorization': 'Basic bashe64usename:password'
}
});
Ketiga: Penyiapan server. Anda harus menyediakan:
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com 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");
Untuk setiap permintaan. Ketika Anda menerima OPTION, Anda harus lulus:
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com for contacts and
* suggestions.
**/
if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header( "HTTP/1.1 200 OK" );
exit();
}
Otentikasi HTTP dan yang lainnya muncul setelah itu.
Berikut adalah contoh lengkap penggunaan sisi server dengan php.
<?php
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com 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();
}
?>
Ada artikel di blog saya tentang masalah ini yang bisa dilihat di sini .