javascript - Deseo llamar a la función de devolución de llamada de Google Plus al hacer clic en el botón Google Plus
jquery codeigniter (2)
He usado un botón de Google Plus en mi proyecto [construido en CodeIgniter]. Aquí he agregado el siguiente código.
<span id="signinButton">
<span
class="g-signin gooConnect"
data-callback="signinCallback"
data-clientid="my_project_client_id"
data-cookiepolicy="single_host_origin"
data-requestvisibleactions="http://schemas.google.com/AddActivity"
data-scope="https://www.googleapis.com/auth/userinfo.email">
</span>
</span>
Luego agregué el código Javascript provisto por Google.
<script type="text/javascript">
(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 signinCallback(authResult) {
if (authResult[''access_token'']) {
$.ajax({
url:base_url+''index.php/user/getUserProfile'',
type:''POST'',
data:{''access'':authResult[''access_token'']},
beforeSend : function(){
$("#loadingImageBeforeResult").show(''slow'');
},
success : function(resp){
$("#loadingImageBeforeResult").hide(''slow'');
if( resp == ''exist'' ){
window.location.href=base_url+''index.php/user/my_deals'';
} else {
$(''#link_for_geniepage'').trigger(''click'');
}
},
error : function(resp){}
});
} else if (authResult[''error'']) {
// There was an error.
// Possible error codes:
// "access_denied" - User denied access to your app
// "immediate_failed" - Could not automatially log in the user
// console.log(''There was an error: '' + authResult[''error'']);
}
}
</script>
Funciona bien para mí, pero si inicio sesión en mi cuenta de Gmail en una pestaña separada y luego voy a mi página de inicio de sesión, la función de devolución de llamada solo inicia sesión automáticamente con mis credenciales de Gmail y me redirecciona a mi panel.
Quiero que a menos que haga clic en ese botón de Google Plus, la función de devolución de llamada no funcione. ¿Cómo puedo hacer esto? Por favor, ayúdame.
Desde los documentos, parece que el botón de inicio de sesión, cuando se usa de esta manera, siempre intentará una validación inmediata. Como ya has iniciado sesión en google y has autorizado la aplicación, google automáticamente inicia sesión y te envía a tu panel.
Sugeriría no usar ese código de muestra. En su lugar, podría utilizar otras partes de la API de JavaScript de Google ( https://developers.google.com/+/web/api/javascript ) Haga un botón de inicio de sesión en Google que sea un botón normal. Cuando se hace clic en él, llame a gapi.auth.authorize()
para iniciar sesión en el usuario. Luego, no ocurre nada hasta que haga clic en el botón, y cuando lo haga, ya sea que solicite aprobación / inicio de sesión o simplemente inicie sesión automáticamente.
En la función signinCallback(authResult)
, primero debe verificar si el usuario ha signinCallback(authResult)
y luego verificar, si el valor del método es AUTO
o PROMPT
. PROMPT
es exactamente lo que quiere porque se devuelve cuando el usuario hace clic en el botón de inicio de sesión. Aquí está el código:
function signinCallback(authResult) {
if (authResult[''status''][''signed_in''] && authResult[''status''][''method''] == ''PROMPT'') {
// User clicked on the sign in button. Do your staff here.
} else if (authResult[''status''][''signed_in'']) {
// This is called when user is signed in to Google but hasn''t clicked on the button.
} 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'']);
}