Saltar al contenido

No recibir el token de actualización de Google OAuth

Bienvenido a nuestra página web, ahora hallarás la resolución a lo que estabas buscando.

Solución:

los refresh_token sólo se proporciona en la primera autorización del usuario. Las autorizaciones posteriores, como las que realiza al probar una integración de OAuth2, no devolverán el refresh_token otra vez. 🙂

  1. Vaya a la página que muestra Aplicaciones con acceso a su cuenta: https://myaccount.google.com/u/0/permissions.
  2. En el menú Aplicaciones de terceros, elija su aplicación.
  3. Haga clic en Eliminar acceso y luego haga clic en Aceptar para confirmar
  4. La próxima solicitud de OAuth2 que realice devolverá un refresh_token (siempre que también incluya el parámetro de consulta ‘access_type=offline’).

Alternativamente, puede agregar los parámetros de consulta prompt=consent&access_type=offline a la redirección de OAuth (consulte la página OAuth 2.0 de Google para aplicaciones de servidor web).

Esto le pedirá al usuario que autorice la aplicación nuevamente y siempre devolverá un refresh_token.

Para obtener el token de actualización, debe agregar ambos approval_prompt=force y access_type="offline"
Si está utilizando el cliente Java proporcionado por Google, se verá así:

GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            HTTP_TRANSPORT, JSON_FACTORY, getClientSecrets(), scopes)
            .build();

AuthorizationCodeRequestUrl authorizationUrl =
            flow.newAuthorizationUrl().setRedirectUri(callBackUrl)
                    .setApprovalPrompt("force")
                    .setAccessType("offline");

Busqué una larga noche y esto está funcionando:

User-example.php modificado de admin-sdk

$client->setAccessType('offline');
$client->setApprovalPrompt('force');
$authUrl = $client->createAuthUrl();
echo "";

luego obtiene el código en la URL de redireccionamiento y la autenticación con el código y obtiene el token de actualización

$client()->authenticate($_GET['code']);
echo $client()->getRefreshToken();

Deberías guardarlo ahora 😉

Cuando se agote el tiempo de espera de su tecla de acceso, simplemente haga

$client->refreshToken($theRefreshTokenYouHadStored);

valoraciones y comentarios

Si guardas algún recelo y disposición de limar nuestro división puedes dejar una acotación y con gusto lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *