Обновить токен в библиотеке Google OAuth2 PHP - PullRequest
1 голос
/ 23 сентября 2019

Я ввел Google OAuth2 для входа пользователя на мой сайт.Это работает, но через 1 час токен истекает и вход не удается.Я прочитал в Интернете, что мне нужно получить токен обновления (для входа в Facebook я использовал Long Lived Token ), но пробованный код не работает.Вот код:

//LOGIN CALLBACK FROM GOOGLE
$gClient = new Google_Client();
$gClient->setApplicationName(SITE_TITLE);
$gClient->setClientId(get_option('google_api_id')->value);
$gClient->setClientSecret(get_option('google_api_secret')->value);
$gClient->addScope('profile');
$gClient->addScope('email');
$gClient->setRedirectUri(SITE_URL."/login/google/google-callback.php");

if(isset($_GET['code'])) {
    $gClient->setAccessType('offline');
    $token = $gClient->fetchAccessTokenWithAuthCode($_GET['code']);
    $gClient->setAccessToken($token['access_token']);
    $_SESSION['google_access_token'] = $token['access_token'];
}

if($gClient->getAccessToken()) {
    // Get user profile data from google
    $google_oauthV2 = new Google_Service_Oauth2($gClient);
    $gpUserProfile = $google_oauthV2->userinfo->get();
}

...

Этот первый фрагмент отлично работает.

В этот второй фрагмент, когда пользователь переходит на страницу изменения, я проверяю, активен ли еще логин:

$gClient = new Google_Client();
$gClient->setApplicationName(SITE_TITLE);
$gClient->setClientId(get_option('google_api_id')->value);
$gClient->setClientSecret(get_option('google_api_secret')->value);
$gClient->addScope('profile');
$gClient->addScope('email');
$gClient->setAccessType('offline');
$gClient->setAccessToken($_SESSION['google_access_token']);
if($gClient->getAccessToken()) {
  if ($gClient->isAccessTokenExpired()) {
    $gClient->fetchAccessTokenWithRefreshToken($gClient->getRefreshToken());
  }
  $google_oauthV2 = new Google_Service_Oauth2($gClient);
  $gpUserProfile = $google_oauthV2->userinfo->get();
  ...
}

Этот второй фрагмент не работает, потому что метод fetchAccessTokenWithRefreshToken($gClient->getRefreshToken()) не работает, потому что $gClient->getRefreshToken() равен NULL.

Я отладил обратный вызов и увидел, что $token = $gClient->fetchAccessTokenWithAuthCode возвращает массив без поля "refresh_token".

Кто-нибудь может мне помочь?

Спасибо, пока

...