Срок действия маркера oauth2 Google API истек?

У меня проблема с Google API и токеном oauth2.

Существует приложение, которое позволяет синхронизировать контакты / календарь с вашей учетной записью Google по токену oauth2.

Когда пользователь в первый раз хочет подключиться к своей учетной записи Google, ему необходимо предоставить доступ, затем приложение получает код / ​​токен, который сохраняется и будет использоваться для автономной синхронизации позже.

function getClient($app)
{
$client = new Google_Client();
$client->setAuthConfig("path_to_secret.json");

switch($app)
{
case 'contacts':
$client->addScope(Google_Service_Script::WWW_GOOGLE_COM_M8_FEEDS);
$client->addScope(Google_Service_People::USERINFO_EMAIL);
break;

case 'calendar':
$client->addScope(Google_Service_Calendar::CALENDAR);
break;

default:
throw new Exception('API Callback not defined in setup');
}

$client->setAccessType('offline'); // offline access
$client->setIncludeGrantedScopes(true);   // incremental auth
$client->setRedirectUri(GOOGLE_APP_URL . $app.'/callback.php');
return $client;
}

(есть разные токены для контактов и календаря)

Скрипт синхронизации:

...
try
{
$client = getClient('calendar');
$client->setAccessToken(unserialize($accessToken));
$http = $client->authorize();

$service = new Google_Service_Calendar($client);

...
}

$ accessToken представляет собой сериализованную строку, например:

a:5:{s:12:"access_token";s:131:"******token_here********";s:10:"token_type";s:6:"Bearer";s:10:"expires_in";i:3598;s:8:"id_token";s:902:"***id_token****";s:7:"created";i:1505178047;}

Это работает в первый раз и пару раз, но через некоторое время (часы) появляется ошибка:

Ошибка: {«error»: {«errors»: [{«domain»: «global», «reason»: «authError», «message»: «Неверные учетные данные», «locationType»: «header», «location» : «Авторизация»}], «код»: 401, «сообщение»: «Недействительные учетные данные»}}

Что я делаю не так?

Что интересно, для синхронизации контактов все время работает нормально (токен доступа имеет те же атрибуты, что и при синхронизации календаря)

1

Решение

Хорошо, возможно, решено — refresh_token предоставляется только в первый раз, поэтому, когда я тестировал его несколько раз, я не получал токен обновления.
Когда я отозвал доступ в https://myaccount.google.com/u/0/permissions и снова подключился, затем я получил токен обновления. Я полагаю, теперь это будет работать правильно

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector