1

私の目的は、グーグルプラスで1回限りのログインを提供することです。基本的に、アクセストークンを保存して、ユーザーが戻ってきたときに再利用したいと思います。私は過去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

リターン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']) "

どんな助けでも大歓迎です

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 に答える