我实现了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”字段。
有人可以帮助我吗?
谢谢 再见