Я хочу получить доступ к данным из междоменного домена в веб-интерфейсе.
У меня есть три сайта: a.com, b.com и c.com. Сайт a.com является внешним. Сайт b.com является бэкэндом (API). C.com является сервером CAS.
Я могу получить прямой доступ к http://b.com/example_test.php в браузере Это успешно перейти на страницу CAS для входа в систему. Затем после входа в систему API возвращает данные.
Я хочу позволить a.com получать данные b.com. Мой код:
Мой интерфейс HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<title>Title</title>
</head>
<body>
<h3 id="article_title"></h3>
<p id="article_text"></p>
</body>
<script type="application/javascript">
var xmlHttpReq = null;
if (window.ActiveXObject) {
xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) {
xmlHttpReq = new XMLHttpRequest();
}
if (xmlHttpReq !== null) {
xmlHttpReq.open("get", "http://b.com/example_test.php");
xmlHttpReq.timeout = 10000;
xmlHttpReq.send("");
xmlHttpReq.onreadystatechange = doResult;
}
function doResult() {
if (xmlHttpReq.readyState === 4) {
console.log(xmlHttpReq.status);
if (xmlHttpReq.status === 200) {
var data = xmlHttpReq.responseText;
var json_data = JSON.parse(data);
/**
do somethin.
*/
}
}
}
</script>
</html>
Мой бэкэнд api example_test.php:
<?php
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:GET,POST,PUT,DELETE,PATCH,HEAD,OPTIONS');
header('Access-Control-Allow-Headers:Origin,Content-Type,Authorization,X-auth-Token');
require_once './MyCAS.php';
$resp = array(
'stats' => -1,
'msg' => 'Empty!'
);
if (array_key_exists('username', $_COOKIE)) {
/**
do something
**/
} else {
phpCAS::client(CAS_VERSION_2_0, "mycase.server.com", 443, "/cas", false);
phpCAS::setNoCasServerValidation();
phpCAS::forceAuthentication();
if (phpCAS::isAuthenticated()) {
$username = phpCAS::getUser();
if ($username !== null) {
$token = md5($username.date('s', time()).date('i', time()));
setcookie('username', $username, time() + 1*86400, '/');
setcookie('token', $token, time() + 1*86400, '/');
/**
do something
**/
}
}
}
?>
Но когда я захожу на a.com через браузер, я не перехожу на страницу CAS. Я не понимаю проблемы. Может ли кто-нибудь помочь мне решить эту проблему?
Вы не можете перенаправить запрос звонящего по ajax. Один из способов добиться этого с помощью JavaScript.
Пример PHP:
<?php
echo 'redirect';
На тебе HTML JavaScript:
$.ajax({
type: 'POST',
async: false,
url: '/users',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify(payload),
success: function(data, textStatus, jqXHR){
if(data == 'redirect'){
console.log(jqXHR.status);
window.location.href= "/thankyou.html";
}
}
});
Других решений пока нет …