Дважды кросс-домен - PullRequest
       7

Дважды кросс-домен

0 голосов
/ 02 июня 2018

Я хочу получить доступ к данным из междоменного домена в веб-интерфейсе.У меня есть три сайта: 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.Я не понимаю проблемы.Может ли кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 02 июня 2018

Вы не можете перенаправить запрос звонящего по 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";
                }
            }
        });
...