php - uris - refresh token google api
Utilice el token de actualización OAuth para obtener un nuevo token de acceso-Google API (1)
Whoa, me tomó mucho más tiempo resolver esto, y las respuestas parecían bastante incompletas para mí.
Antes de comenzar, tenga en cuenta que esta respuesta asume que está utilizando la última biblioteca de API de API de Google , desde el 26 de mayo de 2014 .
1 - Asegúrese de que el tipo de acceso que solicita su aplicación no esté en offline
. Un refresh_token
no se proporciona de otro modo. De Google: este campo solo está presente si access_type = offline está incluido en la solicitud del código de autorización.
$gClient->setAccessType(''offline'');
2 - Después de la primera autorización, persista el refresh_token
proporcionado para más acceso. Esto se puede hacer a través de cookies , base de datos , etc. Elegí almacenar en una base de datos:
$tokens = json_decode($gClient->getAccessToken()); /* Get a JSON object */
setRefreshToken($con, $tokens->refresh_token /* Retrieve form JSON object */);
3 - Compruebe si el AccessToken
ha caducado y solicite un token actualizado de Google, si ese es el caso.
if ($gClient->isAccessTokenExpired()) {
$refreshToken = getRefreshToken($con, $email);
$gClient->refreshToken($refreshToken);
}
Donde getRefreshToken
está recuperando la refresh_token
previamente almacenada de nuestra base de datos, y luego pasamos ese valor al método refreshToken
del Cliente.
Nota rápida: es fundamental recordar que, si previamente había autorizado su aplicación, probablemente no verá una refresh_token
en la respuesta, ya que solo se proporciona la primera vez que llamamos a authenticate
. Por lo tanto, puede ir a https://www.google.com/settings/security y Revocar el acceso a su aplicación o puede agregar la siguiente línea al crear el objeto Cliente:
$gClient->setApprovalPrompt(''force'');
De Google: si el valor es obligatorio, el usuario ve una página de consentimiento incluso si previamente dieron su consentimiento para un determinado conjunto de ámbitos. Lo que a su vez garantiza que se proporcione una refresh_token
en cada autorización.
Muestra completa aquí: http://pastebin.com/jA9sBNTk
Mi aplicación es simple, se conecta a la API de Google+ para autenticar al usuario y, si tiene éxito, recupera el correo electrónico del usuario y luego realiza una serie de operaciones en una base de datos determinada en función del correo electrónico recuperado.
Mi problema principal es que cada hora, mi token de acceso caduca, y parece que no sé cómo "actualizarlo". Me aparece el siguiente error, que me imagino que se espera:
The OAuth 2.0 access token has expired, and a refresh token is not available.
Actualmente estoy almacenando el token de acceso en una base de datos y, por lo tanto, puedo recuperarlo si es necesario. Mi única pregunta es ¿cómo uso ese token para obtener uno nuevo?