Google analytics 刷新令牌在Google Analytics API中不起作用
因此,我在页面顶部定义了所有参数:Google analytics 刷新令牌在Google Analytics API中不起作用,google-analytics,oauth-2.0,google-oauth,Google Analytics,Oauth 2.0,Google Oauth,因此,我在页面顶部定义了所有参数: <?php session_start(); $client = new Google_Client(); $client->setAuthConfigFile('client_secrets.json'); $client->addScope(Google_Service_Analytics::ANALYTICS_READONLY); $client->setAccessType('
<?php
session_start();
$client = new Google_Client();
$client->setAuthConfigFile('client_secrets.json');
$client->addScope(Google_Service_Analytics::ANALYTICS_READONLY);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
$client->setAccessToken($_SESSION['access_token']);
$client->getAccessToken();
} else {
$redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php';
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
//get the access token
$myToken = json_decode($client->getAccessToken());
if ($client->getAuth()->isAccessTokenExpired()) {
$token = $myToken->refresh_token;
echo 'token expired';
} else {
$token = $myToken->access_token;
echo 'token not yet expired';
}
?>
在底部,我得到了java脚本:
<script>
gapi.analytics.ready(function() {
var CLIENT_ID = 'my-client-id-goes-here';
gapi.analytics.auth.authorize({
'serverAuth': {
'access_token': '<?php echo $token; ?>'
}
});
但是,这会一直工作到访问令牌到期,即60分钟后。此后,报告不再显示。我做错了什么?为什么它不使用刷新令牌?不幸的是,这实际上是预期的行为。嵌入API不接受刷新令牌,因为通常情况下,您永远不希望公开这些令牌,如果它们在HTML源代码中,您会这样做 如果您想绕过这个限制,您可以在页面上设置一个计时器,每隔50分钟更新一次访问令牌,或者在60分钟后过期,正如您所指出的那样 如果服务器上有一个端点返回了一个新的访问令牌,则可以执行以下操作:
setInterval(function() {
makeRequestToGetNewAccessToken().then(function(access_token) {
gapi.auth.setToken({
access_token: access_token
});
});
}, 1000 * 60 * 50);
注意,上面的密钥正在使用新的访问令牌进行调用。这将允许嵌入API继续正常工作。谢谢,这对我来说很有意义。我应该在这里放置什么来代替访问令牌I:?gapi.auth.setToken{access_token:这里应该是什么?};另外,作为一种替代解决方案,是否可以将令牌到期时间设置为30年内的某个时间?这与您在代码中的上述内容相同:。另外,要回答第二个问题,不,您不能更改过期期限。出于安全原因,它被设置为1小时。好的,这不起作用。我将您的代码放在这一行上方:gapi.analytics.auth.authorize{'serverAuth':{'access_token':}并等待了一个小时,它似乎没有设置新的令牌。它肯定有效。您可以通过调用gapi.auth.getToken验证它是否设置了令牌,它将返回您刚才设置的令牌。alertgapi.auth.getToken;返回null