我正在使用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,无需任何手动干预。
感谢您的帮助!
答案 0 :(得分:0)
看起来我找到了答案。
我首次使用OAuth网址访问时包含参数prompt=consent
。因此,这会生成保存在文件中的刷新令牌。之后,添加代码后就可以了 -
if ($client->isAccessTokenExpired()) {
$client->refreshToken($client->getRefreshToken());
file_put_contents(CREDENTIALS_PATH, $client->getAccessToken());
}
此后,令牌在一小时后不再过期。