Ответ 1
Эй, мне потребовалось значительно больше времени, чтобы понять это, и ответы там казались мне совершенно неполными.
Прежде чем начать, пожалуйста, имейте в виду, что этот ответ предполагает, что с 26 мая 2014 года вы используете последнюю Библиотека API Google API.
1. Убедитесь, что тип доступа, который требуется вашим приложениям, составляет offline
. A refresh_token
не предоставляется в противном случае. От Google: это поле присутствует только в том случае, если access_type = offline включен в запрос кода авторизации.
$gClient->setAccessType('offline');
2 - После первого авторизации сохраните предоставленный refresh_token
для дальнейшего доступа. Это можно сделать с помощью файлов cookie, базы данных и т.д. Я решил сохранить в базе данных:
$tokens = json_decode($gClient->getAccessToken()); /* Get a JSON object */
setRefreshToken($con, $tokens->refresh_token /* Retrieve form JSON object */);
3 - Проверьте, истек ли срок действия AccessToken
, и запросите обновленный токен от Google, если это так.
if ($gClient->isAccessTokenExpired()) {
$refreshToken = getRefreshToken($con, $email);
$gClient->refreshToken($refreshToken);
}
Где getRefreshToken
извлекает ранее сохраненную refresh_token
из нашей базы данных, а затем мы передаем это значение клиенту refreshToken
.
Быстрое примечание:. Это означает, что если вы предварительно авторизировали свое приложение, вы, вероятно, не увидите ответ refresh_token
, поскольку он предоставляется только при первом вызове authenticate
. Поэтому вы можете перейти в https://www.google.com/settings/security и Отменить доступ к вашему приложению или добавить следующую строку, если создание объекта Client:
$gClient->setApprovalPrompt('force');
От Google: если значение является силовым, пользователь видит страницу согласия, даже если ранее они дали согласие на ваше приложение для данного набора областей. Это, в свою очередь, гарантирует, что на каждой авторизации предоставляется a refresh_token
.
Полный пример здесь: http://pastebin.com/jA9sBNTk