如何使用Google API进行每次请求都获得refresh_token

时间:2018-12-26 23:43:03

标签: php google-api

我正在请求通过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();
}

0 个答案:

没有答案