API входа в Google с зацикливанием PHP

Я использую Google Sign-in API для нашей системы. В прошлом году он работал нормально, пока внезапно не начал бесконечно зацикливаться на странице входа. Это только начало происходить сейчас, и это начало происходить, когда я использовал другую учетную запись для входа в систему.

Я уже пытался возиться с кодом, а также пытался исправить учетные данные на странице API Google, но безуспешно. Я проследил код и обнаружил, что он не возвращает никакого кода для сохранения в переменной $code, показанной ниже.

<?php require ("../css/vendor/autoload.php");
session_start();
require_once('../mysql_connect.php');

//Initialization
$g_client = new Google_Client();
$g_client->setClientId("260506751278-f15240qthdtd15vduqiap98a1oi8qk3o.apps.googleusercontent.com");
$g_client->setClientSecret("JOeshw3N8gjnRdB39xcakw0o");
$g_client->setRedirectUri("http://localhost/ccs/pages/login.php");
$g_client->setScopes("email");
$g_client->setPrompt("consent");
//Create the Authorization url

$auth_url = $g_client->createAuthUrl();
header("Location: $auth_url");
//echo "<a href='$auth_url'>Login Through Google </a>";

// authorization  code
$code = isset($_GET['code']) ? $_GET['code'] : NULL;

// Get access token
if(isset($code)) {
    try {
        $token = $g_client->fetchAccessTokenWithAuthCode($code);
        $g_client->setAccessToken($token);
    }catch (Exception $e){
        echo $e->getMessage();
    }
    try {
        $pay_load = $g_client->verifyIdToken();
    }catch (Exception $e) {
        echo $e->getMessage();
    }
} else{
    $pay_load = null;
}

   $email=$pay_load["email"];
   $fn=$pay_load["name"];
   $ln=$pay_load['family_name'];

    $qemail="select * from faculty_account where faculty_id='{$email}'";
    echo $qemail;
    $resemail=mysqli_query($dbc,$qemail);

    if(isset($pay_load)){

         if (mysqli_num_rows($resemail)!=0)
         {
            $row=mysqli_fetch_array($resemail,MYSQLI_ASSOC);
            $faculty_id=$row['faculty_id'];
            $if_registered = $row['if_registered'];
            $_SESSION['faculty_id'] = $faculty_id;

            if($if_registered == 1){

                $_SESSION['fn'] = $fn;
                $_SESSION['ln'] = $ln;

                header("Location: index.php");

            }

            else{

                header("Location: register.php");

            }

         }
         else{
             echo $qemail;
            header("Location: unauthorized.php");
         }


    }?>

Я ожидаю, что он зарегистрирует меня в системе, как раньше, но теперь он просто зацикливается.

РЕДАКТИРОВАТЬ: Я также хотел бы отметить, что очистка абсолютно всего из моих браузеров работает только ОДИН РАЗ. Я смогу войти в систему один раз и больше никогда, даже если воспроизведу шаги. Я думаю, было бы также важно отметить, что система работает на сервере XAMPP.

РЕДАКТИРОВАТЬ 2: Хорошо, я обнаружил, что он перенаправляет на URL-адрес с переменной кода для получения "http://localhost/ccs/pages/login.php?code=4%2FgQF4oDmkaZrs1n47uKmHAS1r1Xrvhd-8RvDXC67kAne6jmyStvlOM2mbiXn3u_ZyKshE1SgS83P_mnJQPelohttpshttps%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+openid&authuser=0&session_state=36e43354d2853a201602abdf62d2fa2172c51177..e703&prompt=consent#". Я использовал Internet Explorer и, как ни странно, он был настолько медленным, что я мог получить RedirectURI с его переменными. Теперь я совершенно не понимаю, что происходит. Я предполагаю, что это ошибка со стороны Google или что-то не так с токенами.


person Rafael Pangan    schedule 09.07.2019    source источник
comment
И какая именно строка вызывает эту петлю? Что вы пытались обнаружить и устранить проблему?   -  person Nico Haase    schedule 09.07.2019
comment
@NicoHaase строка, в которой он получает код авторизации. Казалось, что он всегда устанавливает полезную нагрузку на ноль. Я проверял, как помещал разные коды заголовков под каждое условное выражение, что позволило бы мне определить, какие условия выполняются. Казалось, что он всегда переходит к оператору else, устанавливающему полезную нагрузку в значение null.   -  person Rafael Pangan    schedule 09.07.2019
comment
@NicoHaase Оказывается, эта строка не вызывает цикл. Он получает код, но, вероятно, он как-то связан с токенами или самим кодом авторизации.   -  person Rafael Pangan    schedule 09.07.2019


Ответы (1)


Хорошо, оказывается, я был прав во втором редактировании. Что-то не так с токеном. Оказывается, он выдавал ошибку с токеном, связанную с моим системным временем. По-видимому, это было вызвано разницей в часовых поясах. Я решил эту проблему, изменив свойство 'leeway' класса jwt на 200 вместо 1. Это создаст некоторые проблемы с безопасностью. Однако, если ваш проект не требует особой безопасности, это быстрое решение.

person Rafael Pangan    schedule 09.07.2019