Google+保存令牌无效

时间:2013-01-17 20:03:25

标签: php oauth-2.0 google-plus

我的目标是提供一次登录google plus。我基本上想要保存访问令牌,然后在用户返回时重用它。我尝试过很多论坛,并且在过去的两天里尝试了各种代码。它不起作用。有人可以帮忙。

首次登录代码:

$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中未捕获的异常'apiAuthException',消息' json解码访问令牌' 堆栈跟踪指向“$ client-> setAccessToken($ row ['token'])”

上方的最后一行

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

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

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

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

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