1

我的目标是通过 google plus 提供一次登录。我基本上想保存访问令牌,然后在用户返回时重用它。我尝试了很多论坛,并在过去 2 天尝试了各种代码。它不工作。谁能帮忙。

首次登录代码:

$client = new apiClient();
$client->setApplicationName("xxxx");
$client->setAccessType("offline");
$client->setClientId(GCLIENT_ID);
$client->setClientSecret(GCLIENT_SECRET);
$client->setRedirectUri('xxxx');
$client->setDeveloperKey('xxxx');
$client->setScopes(array('https://www.googleapis.com/auth/plus.me'));
$url = $client->createAuthUrl();
//redirected to this url

返回网址上的代码

$client = new apiClient();
$client->setApplicationName("xxxx");
$client->setClientId(GCLIENT_ID);
$client->setClientSecret(GCLIENT_SECRET);
$client->setRedirectUri('xxxx');
$client->setDeveloperKey('xxxx');
$client->setScopes(array('https://www.googleapis.com/auth/plus.me'));
$client->setAccessType("offline");
$plus = new apiPlusService($client);

if (isset($_GET['code'])) {
    $client->authenticate();
    $_SESSION['access_token'] = $client->getAccessToken();
    gp_reg($_SESSION['access_token']); 
   **//this function saves the access token to the database**
}

当用户返回

$client = new apiClient();
$client->setApplicationName("xxxx");
$client->setClientId(GCLIENT_ID);
$client->setClientSecret(GCLIENT_SECRET);
$client->setRedirectUri('xxxxx');
$client->setDeveloperKey('xxxx');
$client->setScopes(array('https://www.googleapis.com/auth/plus.me'));
$client->setAccessType('online');
$client-> setApprovalPrompt("auto");
$plus = new apiPlusService($client);

print_r($row['token']);

$client->setAccessToken($row['token']);
// **$row['token'] contains the token from database**

错误信息:

致命错误:/opt/bitnami/apache2/htdocs/src/auth/apiOAuth2.php: 144 堆栈跟踪中的消息“无法 json 解码访问令牌”中未捕获的异常“apiAuthException”导致“$client- >setAccessToken($row['token'])"

任何帮助表示赞赏

4

1 回答 1

0

这听起来像一个类似的问题,并且可以帮助您以最佳方式处理已返回的令牌。听起来这可能是它如何作为 JSON 发送回和如何存储(可能作为字符串而不是 JSON 对象)之间的问题。

https://groups.google.com/forum/#!msg/google-api-php-client/fc7RUw1Pf44/TKpEihEp35wJ

如果是这种情况,您可能需要在将其从数据库中取出时将其重构为对象。

或者您可能只想确保您使用的是 refresh_token 值,因为这确实是您需要使用的。

于 2013-01-17T22:07:28.200 回答