vencida usar una tarjeta puede google credito añadir agregar google-signin google-plus-signin google-identity

google signin - usar - ¿Cómo actualizar los inicios de sesión de inicio de sesión de Google caducados?



añadir tarjeta de credito (4)

Estoy usando el inicio de sesión de Google. Un usuario llega a mi sitio e inicia sesión con gapi.auth2.getAuthInstance().signIn() , o ya gapi.auth2.getAuthInstance().signIn() sesión y cuando la página se carga (o se vuelve a cargar) obtenemos el estado. En este punto tengo un token de identidad válido durante una hora que puedo validar en el servidor.

Cuando un usuario deja el navegador sentado (por ejemplo, durante la noche), este token caduca. gapi.auth2.getAuthInstance().isSignedIn.get() devuelve true, pero el token no se valida.

¿Cómo puedo iniciar sesión en un usuario y mantenerlo conectado mientras su sesión está activa (es decir, el navegador no se ha cerrado)? ¿O actualizar el token? Algo más elegante que recargar la página ...

Edición: el token de actualización no es una respuesta correcta; No quiero acceso sin conexión (y no quiero pedir el permiso). Google, obviamente, piensa que el usuario todavía está registrado en mi aplicación; el usuario puede volver a cargar la página y obtener un nuevo token sin volver a proporcionar las credenciales. ¿Seguramente hay algún mecanismo más elegante que un iframe oculto para obtener un token actualizado?


FWIW, hemos logrado (en su mayoría) hacer que funcione a través de un enfoque de oyente . Parece que se invoca la devolución de llamada ''userChanged'' ~ 5 minutos antes de que caduque el token de acceso. Eso es suficiente para que podamos extraer y actualizar el token de acceso sin actualizar la página.

Sin embargo, lo que no funciona del todo es cuando la computadora vuelve del estado de suspensión. Esto se puede resolver de manera relativamente fácil al volver a cargar la página al despertar .


Puede usar Refresh Token para obtener acceso sin conexión. Según la referencia oficial

Los tokens de acceso tienen vidas limitadas. Si su aplicación necesita acceso a una API de Google más allá de la vida útil de un solo token de acceso, puede obtener un token de actualización. Un token de actualización permite que su aplicación obtenga nuevos tokens de acceso.

Básicamente, recibirá el refresh token la primera vez que solicite la autenticación. Debe guardar ese token de forma segura para su uso futuro. El access token (que mencionó como token de identidad) caduca después de una hora. Después de eso, debe usar el refresh token cada vez que desee obtener un nuevo access token utilizable.

Dependiendo de la biblioteca cliente que utilice, la sintaxis será diferente. A continuación se muestra un ejemplo de la librería cliente php.

// get access token from refresh token if access token expire if($client->getAuth()->isAccessTokenExpired()) { $client->refreshToken($securelyPreservedRefreshToken); $newToken = $client->getAccessToken(); }

compruebe this para más detalles


Puedes lograr esto con los oyentes .

var auth2 = gapi.auth2.getAuthInstance(); // Listen for changes to current user. // (called shortly before expiration) auth2.currentUser.listen(function(user){ // use new user in your OpenID Connect flow });

Esto le permitirá mantener las credenciales actuales, siempre y cuando el navegador permanezca activo.

Si la computadora se pone en suspensión, se debe realizar un trabajo adicional para obtener las credenciales actuales.

if (auth2.isSignedIn.get() == true) { auth2.signIn(); }


Si el token ha caducado, puede llamar a gapi.auth2.getAuthInstance().currentUser.get().reloadAuthResponse() . Devuelve una Promesa.