Я хочу вызвать функцию обратного вызова Google Plus при нажатии на кнопку Google Plus

Я использовал кнопку Google Plus в своем проекте [встроенном в CodeIgniter]. Здесь я добавил следующий код.

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

Затем я добавил код Javascript, предоставленный 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> 

У меня это работает нормально, но если я войду в свою учетную запись Gmail на отдельной вкладке, а затем перейду на свою страницу входа, функция обратного вызова просто автоматически войдет в систему с моими учетными данными Gmail и перенаправит меня на мою панель инструментов.

Я хочу, чтобы, пока я не нажму эту кнопку Google Plus, функция обратного вызова не работала. Как я могу это сделать? Пожалуйста помогите.


person ABorty    schedule 13.06.2013    source источник
comment
Похоже, вы нажимаете кнопку входа, и при входе вы возвращаетесь на старую вкладку, но вы хотите, чтобы она отображалась на той же вкладке?   -  person Korvin Szanto    schedule 01.08.2013
comment
@ aritra-chakraborty Поскольку я не вижу связи с PHP, я изменил пометку на ваш вопрос.   -  person SteAp    schedule 13.08.2013
comment
хорошо... спасибо @SteAp... не могли бы вы сказать мне, как я могу это сделать.   -  person ABorty    schedule 13.08.2013
comment
Я не вижу в вашем коде класса g-plusone, как описано на developers.google. кнопка com/+/web/+1. Я бы посоветовал вам использовать его в соответствии с примером Google и работать оттуда.   -  person Steve K    schedule 20.08.2013
comment
я скопировал код с сайта developers.google.com/+/web/signin. ссылка. Должен ли я изменить это.   -  person ABorty    schedule 20.08.2013
comment
не могли бы вы добавить var clicked = false и проверить его в функции signinCallback одновременно с accessToken. Затем добавьте обработчик кликов в #signinButton, чтобы установить clicked = true и снова запустить скрипт plusone?   -  person Kev Price    schedule 30.08.2013
comment
хорошо, я попробую и дам вам знать. Спасибо @Kev Price   -  person ABorty    schedule 30.08.2013


Ответы (2)


В функции 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']);
  }
person Micer    schedule 17.10.2014

Из документов видно, что при таком использовании кнопка входа всегда будет пытаться выполнить немедленную проверку. Так как вы уже вошли в Google и авторизовали приложение, Google автоматически выполнит вход и отправит вас на панель управления.

Я бы предложил не использовать этот образец кода. Вместо этого вы можете использовать другие части Google Javascript API (https://developers.google.com/+/web/api/javascript) Сделайте кнопку входа в Google обычной кнопкой. Когда это нажато, вызовите gapi.auth.authorize(), чтобы войти в систему пользователя. Затем ничего не происходит, пока они не нажмут кнопку, и когда они это сделают, он либо запрашивает подтверждение/вход в систему, либо просто автоматически регистрирует пользователя.

person Ron Romero    schedule 16.09.2013
comment
Спасибо @Ron, я реализую это и дам вам знать, если у меня возникнут какие-либо проблемы. - person ABorty; 16.09.2013