Google Sign-In API с PHP Looping - PullRequest
0 голосов
/ 09 июля 2019

Я использую 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 с переменной кода gettable "http://localhost/ccs/pages/login.php?code=4%2FgQF4oDmkaZrs1n47uKmHAS1r1Xrvhd-8RvDXC67kAne6jmyStvlOM2mbiXn3u_ZyKshE1SgS83P_mnJQPeloRsY&scope=email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+openid&authuser=0&session_state=36e43354d2853a201602abdf62d2fa2172c51177..e703&prompt=consent#". Я использовал Internet Explorer и довольно забавно, Это было так медленно, что я мог получить RedirectURI с его переменными Теперь я совершенно не знаю, что происходит. Я предполагаю, что это ошибка от имени Google или что-то не так с токенами.

1 Ответ

0 голосов
/ 09 июля 2019

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

...