我使用谷歌API客户端的谷歌分析使用OAuth 2.0谷歌的OAuth:无法获取刷新令牌与授权码
我读这得到刷新令牌,但不会出现它:https://developers.google.com/identity/protocols/OAuth2WebServer#offline
我只得到这个代替:
{
"access_token": "ya29.twHFi4LsiF-AITwzCpupMmie-fljyTIzD9lG8y_OYUdEGKSDL7vD8LPKIqdzRwvoQAWd",
"token_type": "Bearer",
"expires_in": 3599,
"id_token": "very long string"
}
下面是代码:
的Javascript(获取Authorizat离子码):的作品
gapi.analytics.ready(function() {
gapi.analytics.auth.authorize({
container: 'embed-api-auth-container',
clientid: '257497260674-ji56vq885ohe9cdr1j6u0bcpr6hu7rde.apps.googleusercontent.com',
});
gapi.analytics.auth.on('success', function(response) {
var code = response.code;
$.ajax({
url: "getTokensFromCode.php",
method: "GET",
data: {
"code": code
},
success: function (tokens) {
// I can't get refresh token here, only get "access_token" and "id_token"
console.log(tokens);
}
});
});
});
PHP(交换授权代码标记):不起作用
// I get the authorization code in Javascript
$code = $_GET['code'];
$redirectURI = "postmessage";
$client = new Google_Client();
$client->setClientId($clientID);
$client->setClientSecret($clientSecret);
$client->setRedirectUri($redirectURI);
$client->addScope(Google_Service_Analytics::ANALYTICS_READONLY);
$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$client->authenticate($code);
$tokens = $client->getAccessToken();
echo $tokens;
我需要在JavaScript中刷新令牌,这就是为什么我在Javascript中获得授权代码并发出Ajax请求来获取刷新令牌的原因。
我需要授予访问权限一次,并且无需再次登录(我需要向我的网站的访问者显示数据)而始终获取分析数据。这就是为什么我要'refresh_token'('access_token'只能持续1小时)。 为了在第一次登录后获得'refresh_token',我试过了这个: '$ client-> setAccessType('offline'); $ client-> setApprovalPrompt('force');' – enguerran
我撤销了访问并再次登录,它没有给我一个'refresh_token'。无论如何,我认为JS-Ajax-PHP没有用,我会尝试一个完整的PHP解决方案,如Google文档所示。我尝试过这种方法,因为我想用Javascript中的'refresh_token',但正如你所说的那样,反正它不安全。 – enguerran