8

Ho utilizzato un pulsante Google Plus nel mio progetto [incorporato in CodeIgniter]. Qui ho aggiunto il seguente codice.Desidero chiamare la funzione di richiamata di Google Plus quando si fa clic sul pulsante Google Plus

<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> 

Quindi ho aggiunto il codice Javascript fornito da 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> 

Si sta lavorando bene per me, ma se accedo nel mio account Gmail in una scheda separata e poi andare alla mia pagina di login, la funzione di callback solo gli account di accesso di auto con le mie credenziali di Gmail e mi reindirizza al mio dashboard .

Voglio che, a meno che non clicchi su quel pulsante di Google Plus, la funzione di callback non dovrebbe funzionare. Come posso fare questo? Mi aiuti per favore.

+0

Suona come si sta facendo clic sul pulsante Sign In, e l'accesso, che ti riporta alla scheda vecchio, ma lo si vuole rendere nella stessa scheda? –

+0

@ aritra-chakraborty Dal momento che non vedo le relazioni con PHP, ho riadattato la tua domanda. – SteAp

+0

ok ... grazie @SteAp ... puoi dirmi come posso farlo? – ABorty

risposta

2

Dai documenti, sembra che il pulsante di accesso, quando viene utilizzato in questo modo, tenterà sempre una convalida immediata. Dal momento che hai già effettuato l'accesso a Google e hai autorizzato l'app, Google accede automaticamente e ti invia alla dashboard.

Suggerirei di non utilizzare tale codice di esempio. Potresti, invece, utilizzare altre parti dell'API JavaScript di Google (https://developers.google.com/+/web/api/javascript) Fai un pulsante di accesso a Google che è un pulsante normale. Quando viene cliccato, chiama lo gapi.auth.authorize() per accedere all'utente. Quindi non accade nulla finché non fanno clic sul pulsante e, quando lo fanno, richiede l'approvazione/login o semplicemente firma l'utente automaticamente.

+0

Grazie a @Ron lo implementerò e ti farò sapere se dovessi affrontare qualsiasi problema. – ABorty

3

Nella funzione signinCallback(authResult), si dovrebbe in un primo momento di controllo se l'utente è firmato e poi si dovrebbe verificare, se il valore metodo è AUTO o PROMPT. PROMPT è esattamente ciò che desideri perché viene restituito quando l'utente fa clic sul pulsante di accesso. Ecco il codice:

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']); 
    }