Google oauth2访问令牌将在1小时后到期。我想把它做成1天

时间:2017-03-24 10:21:39

标签: php google-api google-calendar-api google-oauth google-api-php-client

我创建了一个包含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();
}

1 个答案:

答案 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;
}