gpt4 book ai didi

php - 如何在多个页面上使用 Google api?

转载 作者:可可西里 更新时间:2023-10-31 23:47:21 24 4
gpt4 key购买 nike

我在多个页面上使用 Google API 时遇到问题。 Example来自谷歌的工作正常,但所有代码都在一页上。

我有两个页面。第一页,用户点击登录按钮,第二页,我使用 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="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 对象。
  • 我可以通过从 session 变量设置 access_token 来创建 Google_client 对象吗?
  • 我应该如何划分代码,以便在 firstPage.php 上只有一个登录按钮,所有其他页面都可以使用 access_token 来使用 google 服务。
  • 除 firstPage.php 和 secondPage.php 之外,还有其他页面我将使用 googleapi。

最佳答案

1。正确重定向

我确实对该行有一些疑问:

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

这是因为我很确定,您没有在 $_SERVER['secondPage.php'] 变量后面设置任何内容。您应该修复此问题以重定向到 secondPage.php,之后就不需要在第一页中添加更多代码了。

2。在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 前两者使用的类设置。

关于php - 如何在多个页面上使用 Google api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29891074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com