我正在请求通过javascript api进行离线访问。
gapi.load('auth2', function(){
auth2 = gapi.auth2.init({
client_id: 'CLIENT_ID',
scope: 'profile email https://www.googleapis.com/auth/calendar'
})
// Create button
$('#signinButton').click(function() {
auth2.grantOfflineAccess({'redirect_uri': 'postmessage', 'approval_prompt': 'force'}).then(onSignIn);
});
})
这给了我一个代码,然后将其发送到我的服务器。
然后,我使用PHP / Pulkitjalan Google库/包装器调用新客户端。 (也通过离线访问进行初始化)
$client = Google::getClient()
if(isset($input['code'])){
$new_creds = $client->authenticate($input['code']);
}
这将返回有效的访问令牌。但是,它缺少refresh_token字段,因此以后我可以提出另一个脱机请求。我显然不能使用我刚刚使用的旧的refresh_token,因为我得到
{error: invalid grant, error_description: bad request}
当我请求新令牌时,如何获得新的refresh_token ??? 我在JavaScript API和服务器客户端初始化中均请求离线访问。会带来什么?
已解决
对于任何有兴趣的人来说,都可以通过不直接通过authenticate方法设置$ new_creds来解决。相反,我调用getAccessToken来获取带有refresh_token的完整令牌,并将其应用于$ new_creds
$client = Google::getClient()
if(isset($input['code'])){
$client->authenticate($input['code']);
$new_creds = $client->getAccessToken();
}