2016-05-21 2 views
0

Я использую API Google Диска и аутентифицирую себя с использованием маркера OAuth с помощью PHP-программы. Для моей тестовой программы я сразу же перешел на OAuth url и создал токен. Затем я использовал его в программе и сохранил его в файле. С следующего момента токен загружается из файла, и программа может получить доступ к Google Диску. Однако, поскольку токен будет действителен только в течение 1 часа, после этого я получаю ошибку, поскольку токен, который он извлекает из файла, больше не будет действителен. Я не понимаю, как я могу обновить токен, чтобы он не требовал вручную получить новый токен.Как обновить токен OAuth?

Ниже мой код -

$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); 

Если креди файл существует, я тяну маркер из этого файла еще я бы Fetching его. В настоящее время, первый маркер времени я устанавливаю вручную -

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 и выполнить API Google Диска без какого-либо вмешательства вручную.

Благодарим за помощь!

ответ

0

Похоже, я нашел ответ.

Я использовал URL-адрес OAuth для первого доступа, чтобы включить параметр prompt=consent. Таким образом, это создало обновленный токен, который был сохранен в файле. После этого, следующее дополнение к коду сделал трюк -

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

После этого маркер больше не истекающий через час.

Смежные вопросы