Как работать с Google API на нескольких страницах?

У меня проблемы с работой с Google API на нескольких страницах. пример от гугл работает нормально но весь код на одной странице.

У меня есть две страницы. Первая страница, где пользователь нажимает кнопку входа в систему, а вторая страница, где я использую Google API для получения информации о пользователе.

Первая страница:

<?php

########## Google Settings.. Client ID, Client Secret from https://cloud.google.com/console #############
$google_client_id       = 'myid';
$google_client_secret   = 'mysecret';
$google_redirect_url    = 'http://www.myWebsite.com/secondPage.php'; //path to your script
$google_developer_key   = 'mydeveloperkey';//include google api files
require_once '../includes/Google/autoload.php';

//start session
session_start();

$client = new Google_Client();
$client->setClientId($google_client_id);
$client->setClientSecret($google_client_secret);
$client->setRedirectUri($google_redirect_url);
$client->addScope("https://www.googleapis.com/auth/drive");
$client->addScope("https://www.googleapis.com/auth/calendar");
$client->addScope("https://www.googleapis.com/auth/gmail.compose");
$client->addScope("https://www.googleapis.com/auth/plus.me");$drive_service = new Google_Service_Drive($client);
$calendar_service = new Google_Service_Calendar($client);
$gmail_service = new Google_Service_Gmail($client);

/************************************************
If we're logging out we just need to clear our
local access token in this case
************************************************/
if (isset($_REQUEST['logout'])) {
unset($_SESSION['access_token']);
}
// Authenticating the aunthentication URL. and starting session
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['secondPage.php'];
header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
}/************************************************
If we have an access token, we can make redirect to secondPage.php, else we generate an authentication URL.
************************************************/
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
header("Location: http://www.myWebsite.com/secondPage.php");
die();
} else {
$authUrl = $client->createAuthUrl();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>

</head>
<body>
<a href="<?php echo $authUrl; ?>"> <img src="https://web-answers.ru/wp-content/uploads/2019/03/google-login-button.png" alt="Click to login"></a>

</body>
</html>

secondPage.php:

<?php ob_start() ?>
<?php

//include google api files
require_once '../includes/Google/autoload.php';

//start session
session_start();

$client = new Google_Client();

/************************************************
If we have an access token, we can make
requests, else we redirect to firstPage.php.
************************************************/
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
$client->setAccessToken($_SESSION['access_token']);
} else {
header("Location: http://www.myWebsite.com/firstPage.php");
die();
}
// Rest is HTML

По какой-то причине оператор if на secondPage.php приводит к значению false, а оператор else перенаправляет его обратно в firstPage.php.

Я совсем новичок в программировании, я почти уверен, что делаю что-то, что не имеет смысла. Дайте мне знать, если я должен добавить больше информации. При ответе на вопрос старайтесь охватить следующие вопросы:

  • Нужно ли создавать отдельный объект Google_client на каждой странице.
  • Могу ли я создать объект Google_client, установив access_token из переменной сеанса.
  • Как мне разделить код так, чтобы на firstPage.php была только кнопка входа в систему, а все остальные страницы могли использовать access_token для использования сервисов Google.
  • будут другие страницы, где я буду использовать googleapi, кроме firstPage.php и secondPage.php.

4

Решение

У меня есть некоторые сомнения по поводу этой строки:

$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['secondPage.php'];

Это потому, что я уверен, что ты ничего не поставил за $_SERVER['secondPage.php'] переменная. Вы должны исправить это, чтобы перенаправить на secondPage.phpи после этого больше не требуется код на первой странице.

В вашем первом скрипте у вас есть такие строки:

$client = new Google_Client();
$client->setClientId($google_client_id);
$client->setClientSecret($google_client_secret);
$client->setRedirectUri($google_redirect_url);

И вы опустили их в secondPage.php, Вероятно, это причина того, что ваш второй скрипт не работает, потому что ваш скрипт не знает, с какой учетной записью он работает. Вы должны настроить свой сценарий снова во втором сценарии, так же, как вы сделали в первом. Также пока я бы отключил ob_start(), это может укрепить отладку.

Я предпочитаю, чтобы вы еще раз внимательно прочитали этот пример в репозитории Google. Это говорит само за себя и требует от вас, чтобы вы читали его снова и снова, если у вас возникнет это странное маленькое чувство … Я могу заверить вас, что вы можете сделать это легко и чисто в трех файлах: первый для ::authenticate() и установить $_SESSIONвторой для ::setAccessToken() и все остальные, и третий со всеми $client настройка класса используется предыдущими обоими.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]