我在多個頁面上使用Google API時遇到問題。來自谷歌的Example工作正常,但所有的代碼都在一個頁面上。如何在多個頁面上使用Google API?
我有兩頁。第一頁,用戶點擊登錄按鈕和第二頁,我用谷歌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="images/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
出於某種原因,如果secondPage.php語句導致成假,else語句被重定向回firstPage.php。
我對編程完全陌生,我很確定我正在做一些沒有意義的事情。讓我知道是否應該添加更多信息。在回答問題時,請嘗試涵蓋以下問題:
- 是否必須在每個頁面上創建單獨的Google_client對象。
- 我可以通過從會話變量設置access_token來創建Google_client對象。
- 我應該如何劃分代碼,以便在firstPage.php上只有一個登錄按鈕,並且所有其他頁面都可以使用access_token來使用Google服務。
- 會有其他網頁,我會使用googleapi以外的其他網頁firstPage.php和secondPage.php。
你確定,'$ client-> getAccessToken()'正在返回你的值,可能會被解釋爲'true'? – yergo
是的,它返回值。 Google提供的示例中也使用了此方法。 –