setAccessToken($_SESSION['token']); } else if(isset($_GET['code'])) { $token = $client->fetchAccessTokenWithAuthCode($_GET['code']); // IF 'code' IS NOT AUTHENTIC, TOKEN IS AN ARRAY WITH 'error' SET TO SOMETHING (i.e. 'invalid_grant') if(isset($token['error'])) { header('Location: ./logout.php'); die(); } $_SESSION['token'] = $token; } else { header('Location: ../home.php'); exit(); } // var_dump($_GET); // var_dump($_SESSION); $oAuth = new Google_Service_Oauth2($client); $userData = $oAuth->userinfo_v2_me->get(); /* Algunos keys de los datos que se pueden extraer: (USADOS) -SCOPE 'profile': name, picture -SCOPE 'email': email (NO USADOS) *-SCOPE 'profile': gender, familyName, givenName, hd, id, link*, locale, verifiedEmail *-SCOPE 'profile': internal_gapi_mappings, modelData, processed Lista completa de scopes: https://developers.google.com/identity/protocols/googlescopes */ require_once 'dbh.inc.php'; $query = 'SELECT * FROM researcher WHERE email = "' . $userData['email'] . '";'; $result = mysqli_query($connection, $query); $dbUserData = mysqli_fetch_assoc($result); // IF DB CAN'T FETCH USER DATA, IT MUST BE BECAUSE USER IS UNAUTHORIZED if($dbUserData === NULL) { $_SESSION['error'] = 'unauthorized'; header('Location: ../unauthorized.php'); exit(); } // FIRST ASSUME USER IS NOT NEW $_SESSION['newUser'] = false; // IF USER IS NEW, UPDATE DB WITH USER INFO FROM GOOGLE // AND SET 'newUser' SESSION VARIABLE TO TRUE if($dbUserData['picture'] == NULL) { //$dbUserData['name'] == NULL && $query = 'UPDATE researcher SET name = "' . $userData['name'] . '", picture = "' . $userData['picture'] . '" WHERE email = "' . $userData['email'] . '";'; mysqli_query($connection, $query); $_SESSION['newUser'] = true; } // REFETCH INFO FROM DATABASE AND STORE IN SESSION $result = mysqli_query($connection, $query); $dbUserData = mysqli_fetch_assoc($result); $_SESSION['dbUserData'] = $dbUserData; //### FOR DEBUGGING ### // $_SESSION['result'] = $result; $_SESSION['error_set'] = isset($_SESSION['error']); //### FOR DEBUGGING ### header('Location: ../home.php'); exit(); /* Additional links that helped: Google Developers Tutorial (Javascript): https://developers.google.com/identity/sign-in/web/sign-in Sample Code: https://github.com/GoogleChromeLabs/google-sign-in Branding Guidelines: https://developers.google.com/identity/branding-guidelines Developer's Console: https://console.developers.google.com Tutorials: -Login With Google Account Using PHP & Client API: https://www.youtube.com/watch?v=hazMyK_cnzk -Login with Google Account using PHP: https://www.codexworld.com/login-with-google-api-using-php/ */