如何刷新OAuth令牌?

时间:2016-05-21 18:26:27

标签: php oauth google-drive-api

我正在使用Google Drive API并使用PHP程序使用OAuth令牌进行身份验证。对于我的测试程序,我手动访问了OAuth url并创建了一个令牌。然后,我在程序中使用它并将其保存到文件中。从下一次开始,令牌将从文件加载,程序可以访问Google云端硬盘。但是,由于令牌仅在1小时内有效,之后我收到错误,因为它从文件中检索的令牌将不再有效。我不清楚如何刷新令牌,以便不需要手动获取新令牌。

以下是我的代码 -

$client = new Google_Client();
$client->setClientId( CLIENT_ID ); 
$client->setClientSecret( CLIENT_SECRET ); 
$client->setRedirectUri( REDIRECT_URIS ); 
$client->setScopes($SCOPES);
$client->setAccessType('offline');
$client->setAuthConfigFile(CLIENT_SECRET_PATH);

如果存在cred文件,我从该文件中提取令牌,否则我将获取它。现在,我第一次手动设置令牌 -

if (file_exists(CREDENTIALS_PATH)) {
    $accessToken = file_get_contents(CREDENTIALS_PATH);
  } else {
    $authCode = 'My Auth Code';
    $accessToken = $client->authenticate($authCode);
  }
  file_put_contents(CREDENTIALS_PATH, $accessToken);

$client->setAccessToken($accessToken);

现在,如果令牌过期,我需要自动刷新令牌。

if ($client->isAccessTokenExpired()) {
    //This is where I am running in trouble.
}

我如何实现它?目标是执行OAuth身份验证并执行Google Drive API,无需任何手动干预。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

看起来我找到了答案。

我首次使用OAuth网址访问时包含参数prompt=consent。因此,这会生成保存在文件中的刷新令牌。之后,添加代码后就可以了 -

if ($client->isAccessTokenExpired()) {
    $client->refreshToken($client->getRefreshToken());
    file_put_contents(CREDENTIALS_PATH, $client->getAccessToken());
}

此后,令牌在一小时后不再过期。