【问题标题】:Google Contacts API in Javascript and PHPJavascript 和 PHP 中的 Google 通讯录 API
【发布时间】:2015-06-15 11:32:22
【问题描述】:

我正在制作一个由 ajax 控制的网站,我在其中使用 Javascript SDK for Google 来验证我的用户,并访问他们的谷歌联系人。我打算做的是:

  1. 在浏览器中对用户进行身份验证,无需重定向并要求访问其联系人列表以及管理其联系人的访问权限。
  2. 如果他/她授予我访问权限,则将用户 ID 连同刷新令牌一起存储在我的数据库中,如果我没记错的话,我只能通过服务器端获取。
  3. 稍后,如果用户想通过我的网站查看他们的 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


【解决方案1】:

在头疼了几天之后,我也想出了这个问题...感谢 Google,您的文档很烂。

 $client->setRedirectUri($redirect_uri);

$redirect_uri 参数应该是一个字符串:“postmessage”,当通过 javascript 进行身份验证时,您应该请求一个 CODE 而不是一个 TOKEN,然后将其发送到服务器端脚本,以进行身份​​验证和交换令牌.

  gapi.auth.authorize({client_id: googleApi.clientId, scope: googleApi.scopes, response_type: 'code', immediate: true}, g_handleAuthResult);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 2011-09-02
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 2016-07-23
    相关资源
    最近更新 更多