2013-06-13 37 views
8

Tôi đã sử dụng nút Google Plus trong dự án của mình [được xây dựng trong CodeIgniter]. Ở đây tôi đã thêm mã sau đây.Tôi muốn gọi chức năng gọi lại của Google Plus khi nhấp vào nút 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> 

Sau đó, tôi đã thêm mã Javascript do Google cung cấp.

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

Đó là làm việc tốt cho tôi, nhưng nếu tôi đăng nhập vào tài khoản Gmail của tôi trong một tab riêng biệt và sau đó tôi đi đến trang đăng nhập của tôi, chức năng gọi lại chỉ đăng nhập tự động với các thông tin Gmail của tôi và chuyển hướng tôi đến bảng điều khiển của tôi .

Tôi muốn điều đó trừ khi tôi nhấp vào nút Google Plus đó, chức năng gọi lại sẽ không hoạt động. Tôi có thể làm cái này như thế nào? Làm ơn giúp tôi.

+0

Có vẻ như bạn đang nhấp vào nút đăng nhập và khi đăng nhập, nó sẽ đưa bạn trở lại tab cũ nhưng bạn muốn hiển thị lại trong cùng một tab? –

+0

@ aritra-chakraborty Vì tôi không thấy quan hệ với PHP, tôi đã gắn thẻ lại câu hỏi của bạn. – SteAp

+0

ok ... cảm ơn bạn @SteAp ... bạn có thể vui lòng cho tôi biết làm cách nào tôi có thể thực hiện việc này. – ABorty

Trả lời

2

Từ tài liệu, có vẻ như nút đăng nhập, khi được sử dụng theo cách này, sẽ luôn cố gắng xác thực ngay lập tức. Vì bạn đã đăng nhập vào google và đã ủy quyền ứng dụng, google sẽ tự động đăng nhập bạn và gửi bạn đến trang tổng quan của bạn.

Tôi khuyên bạn không nên sử dụng mã mẫu đó. Thay vào đó, bạn có thể sử dụng các phần khác của API Javascript của Google (https://developers.google.com/+/web/api/javascript) Tạo nút đăng nhập Google là nút bình thường. Khi được nhấp, hãy gọi gapi.auth.authorize() để đăng nhập người dùng. Sau đó, không có gì xảy ra cho đến khi họ nhấp vào nút và khi họ thực hiện, nó sẽ yêu cầu phê duyệt/đăng nhập hoặc chỉ đăng nhập người dùng một cách tự động.

+0

Cảm ơn @Ron tôi sẽ thực hiện nó và cho bạn biết nếu tôi phải đối mặt với bất kỳ vấn đề. – ABorty

3

Trong chức năng signinCallback(authResult), trước tiên bạn nên kiểm tra xem người dùng đã đăng nhập chưa và sau đó bạn nên kiểm tra, nếu giá trị phương thức là AUTO hoặc PROMPT. PROMPT là chính xác những gì bạn muốn vì nó được trả lại khi người dùng nhấp vào nút đăng nhập. Đây là mã:

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']); 
    } 
Các vấn đề liên quan