Как получить refresh_token с каждым запросом с помощью Google API - PullRequest
0 голосов
/ 27 декабря 2018

Я запрашиваю автономный доступ через API javascript.

      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);
        });
      })

Это дает мне код, который я затем отправляю на свой сервер.

Затем я использую библиотеку Google PHP / Pulkitjalan/ обертка для вызова нового клиента.(который также инициализируется с автономным доступом)

$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, так и в инициализации клиента сервера.Что дает ??

решено

Для всех, кто заинтересовался, это было решено, не устанавливая $ new_creds непосредственно из метода authenticate.Вместо этого я вызвал getAccessToken, чтобы получить полный токен с refresh_token, и применил его к $ new_creds

$client = Google::getClient()
if(isset($input['code'])){
   $client->authenticate($input['code']); 
   $new_creds = $client->getAccessToken();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...