Я запрашиваю автономный доступ через 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();
}