ホームページ >バックエンド開発 >PHPチュートリアル >「invalid_grant」エラーを回避するために Google API クライアント アクセス トークンを効率的に更新する方法

「invalid_grant」エラーを回避するために Google API クライアント アクセス トークンを効率的に更新する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-12-17 08:14:24737ブラウズ

How to Efficiently Refresh Google API Client Access Tokens to Avoid

Google API クライアント アクセス トークンの更新

問題の理解

Google Analytics API を使用すると、エラーが発生する場合があります複数の Google アカウントのデータにアクセスしようとしたとき。この問題は、アクセス トークンが 1 時間後に期限切れになるために発生します。 $client->refreshToken() を使用してトークンを更新すると問題は解決しますが、場合によっては「invalid_grant」エラーが返されることがあります。

解決策

トークンを正しく更新するには、次のことを理解する必要があります。以下:

  • 最初のトークン: 認証中に取得する最初のトークンには、リフレッシュ トークンが含まれます。
  • 一時トークン: リフレッシュされたトークン$client->refreshToken($refreshToken) を使用して取得された、
  • 更新時間: 最初のトークンと一時トークンは両方とも 1 時間後に期限切れになります。

コードの実装

添付のコードは、トークンを管理するためのソリューションを示しています。 Expiration:

// Retrieve the original token.
$originalToken = json_decode($token);

// Calculate token expiration time.
$now = time();
$expirationTime = $originalToken->created + 3600;

// Check if token is expired.
if ($now > $expirationTime) {
    // If expired, use the refresh token from the original token to obtain a new temporary token.
    $client->refreshToken($originalToken->refresh_token);
    $newToken = $client->getAccessToken();
    $tokenQuery = "UPDATE token SET token='$newToken' WHERE type='refresh'";
    mysqli_query($cxn, $tokenQuery);
    $token = $newToken;
} else {
    // If the original token hasn't expired, set the token as the original token.
    $client->setAccessToken($token);
}

このコードは、元のトークンを取得し、その有効期限を計算し、有効期限が切れているかどうかを確認します。存在する場合、リフレッシュ トークンを使用してトークンをリフレッシュし、データベースを更新します。元のトークンの有効期限が切れていない場合は、クライアントのアクセス トークンを元のトークンとして設定します。

以上が「invalid_grant」エラーを回避するために Google API クライアント アクセス トークンを効率的に更新する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。