8

[CodeIgniter に組み込まれた] プロジェクトで 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ボタンをクリックしない限り、コールバック関数が機能しないようにしたい. これどうやってするの?私を助けてください。

4

2 に答える 2

3

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

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']);
  }
于 2014-10-17T11:09:43.407 に答える
2

ドキュメントから、サインイン ボタンをこのように使用すると、常にすぐに検証が試行されるように見えます。既に Google にサインインしており、アプリを承認しているため、Google は自動的にサインインし、ダッシュボードに送信します。

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

于 2013-09-16T04:17:14.910 に答える