我创建了一个包含Google OAuth2
凭据的项目,可用于Google日历。
然而,访问权限每隔1小时就会到期。
有人可以帮助我将过期时间更改为1天。
我已使用此代码访问Google日历活动:
$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->setAccessType('offline');
$client->setScopes(array('https://www.googleapis.com/auth/calendar'));
if (isset($_GET['code']))
$google_oauth_code = $_GET['code'];
$client->authenticate($_GET['code']);
$_SESSION['token'] = $client->getAccessToken();
$_SESSION['last_action'] = time();
}
答案 0 :(得分:5)
有些事情你需要了解Oauth2。访问令牌是短暂的,他们只持续一个小时,这是他们的工作方式,你不能改变它。
您应该做的是在设置以下内容时存储身份验证过程返回的刷新令牌。
$client->setAccessType('offline');
通过使用刷新令牌,您可以请求新的访问令牌。此示例可能有助于它显示如何在访问令牌过期时设置它。 upload example
可能就是这样。
$client = new Google_Client();
$client->setApplicationName(APPNAME);
$client->setClientId(CLIENTID); // client id
$client->setClientSecret(CLIENTSECRET); // client secret
$client->setRedirectUri(REDIRECT_URI); // redirect uri
$client->setApprovalPrompt('auto');
$client->setAccessType('offline'); // generates refresh token
$token = $_COOKIE['ACCESSTOKEN'];
// if token is present in cookie
if($token){
// use the same token
$client->setAccessToken($token);
}
// this line gets the new token if the cookie token was not present
// otherwise, the same cookie token
$token = $client->getAccessToken();
if($client->isAccessTokenExpired()){ // if token expired
$refreshToken = json_decode($token)->refresh_token;
// refresh the token
$client->refreshToken($refreshToken);
}
return $client;
}