8

[CodeIgniterでビルドされた]プロジェクトでGoogle Plusボタンを使用しました。ここでは、次のコードを追加しました。Google Plusボタンをクリックしたときに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> 

次にGoogleが提供するJavascriptコードを追加しました。

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

それは私のために正常に動作していますが、私はその後、別のタブでGmailアカウントにログインしている場合、私は私のGmailの資格情報を使用して、私のログインページ、コールバック関数にだけ自動ログインを行って、自分のダッシュボードに私をリダイレクトします。

私はそのGoogle Plusボタンをクリックしない限り、コールバック機能は動作しません。これどうやってするの?私を助けてください。

+0

サインインボタンをクリックしているように聞こえますが、サインインすると古いタブに戻りますが、同じタブでレンダリングしますか? –

+0

@ aritra-chakraborty私はPHPとの関係は見ないので、私はあなたの質問にタグを付けました。 – SteAp

+0

ok ...ありがとう@SteAp ...どうすればいいか教えてください。 – ABorty

答えて

2

このように使用すると、サインインボタンのように見えますが、すぐに確認が行われます。既にGoogleにサインインしており、このアプリを承認しているので、googleは自動的にサインインしてダッシュボードに送信します。

私はそのサンプルコードを使用しないことをお勧めします。代わりに、Google Javascript APIの他の部分(https://developers.google.com/+/web/api/javascript)を使用して、通常のボタンであるGoogleログインボタンを作成することができます。それがクリックされたら、gapi.auth.authorize()にログインしてユーザーをログインさせます。ボタンをクリックするまで何も起こらず、承認/ログインを要求するか、ユーザーに自動的に署名します。

+0

ありがとう@Ron私はそれを実装し、何か問題に直面するかどうかを知らせます。 – ABorty

3

signinCallback(authResult)関数では、ユーザーがサインインしていることを最初に確認してから、メソッド値がAUTOまたはPROMPTであるかどうかを確認する必要があります。 PROMPTは、ユーザーがサインインボタンをクリックしたときに返されるため、まさにあなたが望むものです。コードは次のとおりです:

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']); 
    } 
関連する問題