9

Как я могу обновить токен? Я использую Google api с этим токеном - он работает, но не может найти, как его обновить, в этом примере мы не сохраняем истекшее время. Я требуюОбновить токен oauth2 google api и HWIOAuthBundle

`access_type:  offline ` 

затем

$client = new Google_Client(); 
     //$client->setClientId($GoogleClientId); 
     $client->setApplicationName($GoogleAppName); 
     $client->setClientId($this->user->getGoogleId()); 
     $client->setAccessType('offline'); 

если маркер действителен я могу работать, но когда истек я стараюсь

$token = [ 
      'access_token' => $this->user->getGoogleAccessToken(), 
      'expires_in' => (new \DateTime())->modify('-1 year')->getTimestamp(), 
     ]; 

я поставил эту любую дату, потому что в этом примере мы не» t сэкономленное время истекло

https://gist.github.com/danvbe/4476697

$client->setAccessToken($token); 

    if($client->isAccessTokenExpired()){ 

     $refreshedToken = $client->refreshToken($client->getAccessToken()); 

здесь у меня есть ошибка

array:2 [▼ 
    "error" => "invalid_request" 
    "error_description" => "Could not determine client ID from request." 
] 

Существует HwiAuthBundle метод, чтобы обновить маркер? Почему это не работает с обновлением Google_Client?

+0

что такое getGoogleId? Идентификатор клиента - это идентификатор клиента из консоли разработчика Google, который используется для создания токена обновления, который вы используете. – DaImTo

+1

Если вы еще не видели эту ветку, похоже, они считают, что обновляющие токены имеют более низкий приоритет для этого пакета: https://github.com/hwi/HWIOAuthBundle/issues/457 Итак, общее решение для plug and play, это не. –

ответ

-2

Извините, что расстроен вами amigo, но похоже, что этот пакет не реализует никаких функций обновления токена. Или это осталось вам.

Вот открытый вопрос в их GitHub, имеют вид: https://github.com/hwi/HWIOAuthBundle/issues/457

Вот комментарий от вопроса:

Эта функция существует, но нет легко использовать его, как вам нужно do все, что вам нужно (о хранении более подробной информации о токенах, , об обнаружении истечения срока действия, при вызове Google, чтобы получить новый токен, и вместо старого), только помощь из этого пакета на данный момент, это код, который позволяет вам запрашивать Google для нового свежего токена: GenericOAuth2ResourceOwner :: refreshToken(), он должен работать как ожидалось, но я не использовал этот пакет в течение длительного времени =)

Люди там ожидающие Сущностью (фрагмент кода), чтобы показать им, как для этого, но пока ничего.

+0

Не совсем верно. Он использует [метод] (https://github.com/hwi/HWIOAuthBundle/blob/0.5.3/OAuth/ResourceOwner/GenericOAuth2ResourceOwner.php#L107), чтобы обновить токен, но он не документирован как использовать Это. Я прошу предоставить хороший пример в дополнение к документации. –

+1

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/17379223) –

+0

Cheers Donald, немного обновил его. – delboy1978uk

1

В OAuth 2.0 для обновления с истекшим сроком действия маркеров доступа, вам необходимо отправить в конечную точку:

  • типа грант равен «refresh_token»
  • действительного refreshToken
  • вашего ClientId
  • and your clientSecret

Вы не можете отправить истекло доступ к информации через GoogleToken, чтобы получить новый реквизиты eshed accessToken.

public function refreshAccessToken($refreshToken, array $extraParameters = array()) 
{ 
    $parameters = array_merge(array(
     'refresh_token' => $refreshToken, 
     'grant_type' => 'refresh_token', 
     'client_id' => $this->options['client_id'], 
     'client_secret' => $this->options['client_secret'], 
    ), $extraParameters); 
    $response = $this->doGetTokenRequest($this->options['access_token_url'], $parameters); 
    $response = $this->getResponseContent($response); 
    $this->validateResponseContent($response); 
    return $response; 
} 

функция refreshAccessToken ($ refreshToken, ...

и не $

маркер доступа

Я думаю, вам нужно позвонить после того, как построить свой клиент с учетными данными

$client = new Google_Client(); 
$client->setAuthConfig('client_secrets.json'); 
$client->refreshToken($client->getRefreshToken()); 

https://developers.google.com/api-client-library/php/auth/web-app#creatingcred

Вы уверены в своем $client->setClientId($this->user->getGoogleId());? Что такое getGoogleId()? Я думаю, вам нужно также создать OAuth идентификатор клиента: https://developers.google.com/identity/sign-in/web/devconsole-project

В OAuth client_id не идентификатор пользователя, но приложение идентификатор

+0

В пакете уже есть метод обновления токена: [GenericOAuth2ResourceOwner :: refreshToken()] (https://github.com/hwi/HWIOAuthBundle/blob/0.5.3/OAuth/ResourceOwner/GenericOAuth2ResourceOwner.php#L107), но нет документации, как ее реализовать в рабочем процессе, как описано [здесь] (https://github.com/hwi/HWIOAuthBundle/blob/master/Resources/doc/4-integrating_fosub.md) –

+0

да, но это явно, что вы должны передать refreshToken, а не accessToken в первом параметре метода refreshAccessToken. В oauth 2.0, чтобы обновить токен доступа, вам нужно отправить действительный токен refresh, равный__type равен 'refresh_token', а ваш идентификатор и секрет вашего клиента –

+0

Можете ли вы отметить мой ответ? я делаю небольшое соревнование с моими коллегами, мне нужны некоторые моменты. благодаря ! –

Смежные вопросы