plus origins one google example boton authorized javascript html google-plus

javascript - origins - Google+ SigninCallback llamó dos veces y perdiendo la autenticación en proceso



google plus one (3)

Hay un error en mi código. Puedo iniciar sesión y recuperar la información del usuario. Pero el signinCallback se llama de nuevo (no sé cómo). Y muestra la información del usuario que tenía antes se ha ido! Aquí está el lado HTML:

<span id="signinButton"> <span class="g-signin" data-callback="signinCallback" data-clientid="CLIENT_ID" data-cookiepolicy="single_host_origin" data-requestvisibleactions="http://schemas.google.com/AddActivity" data-scope="https://www.googleapis.com/auth/plus.profile.emails.read" data-width="standard" data-height="short"> </span> </span>

y aquí está el lado de javascript:

var AuthStates = { google: null }; function signinCallback(authResult) { console.dir(authResult); console.log(''Sign-in state: '' + authResult[''error'']+authResult[''access_token'']); AuthStates.google = authResult; console.log(''signinCallback''); chooseAuthProvider(); } function chooseAuthProvider() { if (AuthStates.google && AuthStates.facebook) { if (AuthStates.google[''access_token'']) { // Signed in with Google, you can now use Google+ APIs. console.log(AuthStates.google); gapi.client.load(''plus'',''v1'', function(){ var request = gapi.client.plus.people.get({ ''userId'': ''me'' }); request.execute(function(resp) { document.getElementById(''cname'').value =resp.displayName; document.getElementById(''cemail'').value =resp.emails[0].value; console.log(''Retrieved profile for:'' + resp.displayName + '' '' + resp.emails[0].value); }); }); } }

Da esta respuesta a la consola en el segundo signinCallback

Sign-in state: user_signed_outundefined signinCallback


Esto podría ser útil para usted

(function () {var GOOGLE_PLUS_SCRIPT_URL = '' https://apis.google.com/js/client:plusone.js '';

window.oauth2Callback = function(authResult) { if (authResult[''access_token'']) { accessToken = authResult[''access_token'']; $(function() { $.getScript(GOOGLE_PLUS_SCRIPT_URL);}



Su llamada a request.execute () en su método de devolución de llamada hace que el método de devolución de llamada se vuelva a activar con el valor "user_signed_out" en la propiedad de error.

Si echas un vistazo a la documentación de Google "Cerrar sesión del usuario", se lee:

Cuando el usuario actualiza la página o navega a otra parte de su sitio web, la devolución de llamada se activará con el valor user_signed_out en la propiedad de error hasta que el usuario vuelva a hacer clic en el botón de inicio de sesión.

Por lo tanto, creo que es su llamada a request.execute () la que está activando la segunda llamada al método de devolución de llamada.

Puede protegerse contra esta segunda llamada a la devolución de llamada poniendo una condición dentro del método de devolución de llamada, por ejemplo,

function signinCallback(authResult) { if (authResult[''status''][''signed_in'']) { console.dir(authResult); console.log(''Sign-in state: '' + authResult[''error'']+authResult[''access_token'']); AuthStates.google = authResult; console.log(''signinCallback''); chooseAuthProvider(); } }

Consulte la documentación de Google sobre "Supervisión del estado de la sesión del usuario" para ver un ejemplo de las condiciones de protección mencionadas anteriormente.