Я ввел 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".
Кто-нибудь может мне помочь?
Спасибо, пока