img attribute javascript google-api google-oauth google-api-client google-authentication

javascript - attribute - Inicio de sesión de Google golpeando dos veces?



title en css (2)

Está encontrando dos llamadas a "console.log (resp);" dentro de su función "googleCallback" porque:

La función que defina para su devolución de llamada de inicio de sesión se llamará cada vez que el usuario que haya iniciado sesión cambie de estado

Esta cita se ha tomado de la página web "Supervisión del estado de la sesión del usuario" .

Como puede ver en el artículo, el objeto de resultado de autorización tiene tres valores de "método" de estado diferentes:

  • nulo
  • RÁPIDO
  • AUTO

Por lo tanto, su código de devolución de llamada se activa cuando aparece el mensaje de inicio de sesión ("PROMPT") y cuando aparece el banner "Bienvenido" ("AUTO").

Para evitar que su código de devolución de llamada trate con cada evento desencadenante, puede cambiar su código de la siguiente manera:

function signinCallback(authResult) { if (authResult[''status''][''signed_in'']) { // Update the app to reflect a signed in user // Hide the sign-in button now that the user is authorized, for example: // document.getElementById(''signinButton'').setAttribute(''style'', ''display: none''); if (authResult[''status''][''method''] == ''PROMPT'') { console.log(authResult[''status''][''method'']); gapi.client.load(''oauth2'', ''v2'', function () { gapi.client.oauth2.userinfo.get().execute(function (resp) { console.log(resp); }) }); } } else { // Update the app to reflect a signed out user // Possible error values: // "user_signed_out" - User is signed-out // "access_denied" - User denied access to your app // "immediate_failed" - Could not automatically log-in the user console.log(''Sign-in state: '' + authResult[''error'']); } }

Este código solo llamará a la función "gapi.client.oauth2.userinfo.get ()" si un usuario ha iniciado sesión y el evento que activó la devolución de llamada es del tipo "PROMPT".

Estoy usando el inicio de sesión de Google a través de JS y parece que mi código está obteniendo datos dos veces. No estoy seguro de por qué ocurre esto.

Cuando hago clic en el botón "Iniciar sesión con Google", escupe datos (console.log (resultado)) para el usuario. ENTONCES se produce un mensaje pidiéndome que elija una cuenta mía (inicié sesión en varias cuentas de Google). Cuando hago clic en la cuenta que me gustaría, el código vuelve a mostrar los datos del usuario.

¿Por qué ocurre esto? Es un problema porque cuando escupo los datos, me gustaría hacer una llamada ajax para verificar al usuario y luego redirigirlos. Así que, en esencia, se trata de hacer esto dos veces, lo cual no es bueno, ¿y si no deseo iniciar sesión con las credenciales que Google pasa de nuevo en la primera ronda?

(function() { var po = document.createElement(''script''); po.type = ''text/javascript''; po.async = true; po.src = ''https://apis.google.com/js/client:plusone.js''; var s = document.getElementsByTagName(''script'')[0]; s.parentNode.insertBefore(po, s); })(); function googleLogin() { var additionalParams = { ''callback'': googleCallback }; gapi.auth.signIn(additionalParams); } function googleCallback(authResult) { if (authResult[''status''][''signed_in'']) { gapi.client.load(''oauth2'', ''v2'', function() { gapi.client.oauth2.userinfo.get().execute(function(resp) { console.log(resp); }) }); } else { console.log(''Sign-in state: '' + authResult[''error'']); } }

Actualización: si cierro la sesión de todas mis cuentas de Google (con la excepción de una y solo una), la llamada a Google aún está duplicada. Esta vez inicia sesión y veo console.log () que genera datos dos veces. Los tokens de acceso son idénticos.

Actualización 2: console.log (resp) da salida dos veces

Actualización 3: Solo más aclaración:


Google siempre pasa por el estado "PROMPT", pero a través del estado "AUTOMÁTICO" justo cuando el usuario tiene un inicio de sesión anterior exitoso y puede iniciar sesión automáticamente.