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);}
Pruebe las instrucciones actualizadas en la página " Integración del inicio de sesión de Google en su aplicación web ".
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.