【发布时间】:2015-06-15 11:32:22
【问题描述】:
我正在制作一个由 ajax 控制的网站,我在其中使用 Javascript SDK for Google 来验证我的用户,并访问他们的谷歌联系人。我打算做的是:
- 在浏览器中对用户进行身份验证,无需重定向并要求访问其联系人列表以及管理其联系人的访问权限。
- 如果他/她授予我访问权限,则将用户 ID 连同刷新令牌一起存储在我的数据库中,如果我没记错的话,我只能通过服务器端获取。
- 稍后,如果用户想通过我的网站查看他们的 google 联系人,向我的服务器发送一个 ajax 请求,该请求向用户请求 access_token,检索数据并将其显示给用户,或将其存储在如果用户要求,我自己的数据库。
我已经成功完成了这三个步骤的第一步,我可以对用户进行身份验证,并获得对有效期为 3600 小时的单个访问令牌的访问权限,但我不知道如何对用户服务器进行身份验证侧,没有将他重定向到任何地方。我也尝试使用 Google PHP SDK,但似乎无法弄清楚如何做到这一点。我确信这在某种程度上是可能的,因为它在Google PHP SDK guide 中有所说明:
如果我们在 Android 或 Javascript Web 客户端上进行了身份验证,我们可能通过不同的方式获取了代码。在这种情况下,我们只需要交换它。如果它是通过 gapi Javascript 客户端检索的,我们需要设置重定向 URI postmessage。
$client->setRedirectUri($redirect_uri);
唯一的问题是我不明白该怎么做。 $redirect_uri 是什么?我没有重定向 url,因为当我实现 Javascript SDK 时,它说我不必使用重定向 uri,因为 Javascript 身份验证是在同一个窗口中完成的,没有重定向(正如我想要的那样它)。
我该如何继续解决上面提到的第二步和第三步?我在哪里可以找到一个非 hacky 或不是非常 hacky 的教程,以达到我想要的结果?
编辑:
我基本上想要实现的是以下几点:
- 向用户请求访问 Google 通讯录的权限,而不是从我的网站重定向他(通过弹出窗口)
使用 Javascript SDK 实现了这一目标
- 获取此权限的访问令牌和刷新令牌,并将它们存储在数据库中
Javascript SDK 只授予访问令牌,我不想通过 ajax 调用传递它,因为我觉得这是不安全的
- 使用刷新令牌,在服务器端为用户生成访问令牌,并处理数据,并将数据发回。
这是我的 PHP 文件目前的样子:
$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setScopes('https://www.googleapis.com/auth/plus.me');
$client->setRedirectUri($PHP_SELF);
$client->setState('offline');
$authUrl = $client->createAuthUrl();
if (isset($_GET['code'])) {
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
$result=$client->getAccessToken();
} else {
header("Location: ".$authUrl);
exit;
}
为了实现我想要的,我应该通过Javascript SDK以某种方式获取$_GET['code']参数,但我不知道如何:|
【问题讨论】:
-
访问令牌有效期为 3600 秒或 1 小时
-
我知道这一点,但我还需要一个刷新令牌,我想通过 PHP 处理数据。我不认为将身份验证后获得的访问令牌发送到我的 php 服务器以供使用是一种好习惯,因为它是相当敏感的数据。
-
无法通过 JavaScript 获取刷新令牌,需要从 php 获取。
-
DalmTo,我应该如何进行?请查收:stackoverflow.com/questions/30848682/…
标签: google-api google-api-php-client