1

Google 認証で問題が発生しました。1 か月間は機能しましたが、数日後にこのエラーが発生しました。

Fatal error: Uncaught exception 'apiAuthException' with message 
'Invalid token format' in /home/project/html/google/auth/apiOAuth2.php:127 Stack trace:
#0 /home/project/html/google/auth/apiOAuth2.php(89): apiOAuth2->setAccessToken('{? "access_tok...')
#1 /home/project/html/google/apiClient.php(132): apiOAuth2->authenticate(Array)
#2 /home/project/html/hk/connects/google.php(22): apiClient->authenticate()
#3 {main} thrown in /home/project/html/google/auth/apiOAuth2.php on line 127

apiOAuth2.php には次のコードがあります。

$accessToken = json_decode($accessToken, true);
if (! isset($accessToken['access_token']) || ! isset($accessToken['expires_in']) || ! isset($accessToken['refresh_token'])) {
  throw new apiAuthException("Invalid token format");
}

Google が $accessToken['refresh_token'] を送ってくれないことに気付きました。http://stackoverflow.comで正しい接続を行ったので、Googleから来たようには見えません

多分それは私のコードの原因です:

session_start();

$client = new apiClient();
$plus = new apiPlusService($client);

if (!isset($_GET['code'])) {
  header('Location: '.$client->createAuthUrl()); // Calls the same page
} else {
  $client->authenticate(); // Fails at this level
}

編集:

私はそれを行う方法を考え出しました.refresh_tokenが何のために作られたのかわからないので、次の行を追加しました:

if (!isset($accessToken['refresh_token'])) $accessToken['refresh_token'] = 12345678910;

とりあえず効く…

4

1 に答える 1

2

Google 認証 API が有効な更新トークンを取得するために必要な、「access_type」という新しい明示的なパラメーターがあります。このパラメーターを使用して、アカウントへのオフライン アクセスが必要であることを宣言すると、API が更新トークンを提供します。

新しい必須パラメーターを自動的に処理する最新の Google PHP SDK をダウンロードします。

于 2011-12-12T11:49:51.417 に答える