在Google OAuth2 PHP库上刷新令牌

时间:2019-09-23 13:33:07

标签: php google-oauth2

我实现了Google OAuth2,以便在我的网站上进行用户登录。 它可以工作,但是1小时后令牌过期并且登录失败。 我在网络上阅读了我需要获取刷新令牌的信息(对于Facebook登录,我使用了寿命长的令牌),但是我尝试的代码无法正常工作。 这里的代码:

//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”字段。

有人可以帮助我吗?

谢谢 再见

0 个答案:

没有答案