2013-09-24 24 views
7

Tôi đang sử dụng đăng nhập G + cho trang web của mình và tôi đã tìm thấy sự cố này.G + liên kết gọi lại bằng nút đăng nhập hai lần

Trang web của tôi có thanh công cụ (nó render với Javascript) và nút đăng nhập G + vào nó vì vậy tôi đính kèm G + API Javascript trong file trên thanh công cụ

[toolbar-notlogin.php]

<script> 
(function() { 
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; 
po.src = 'https://apis.google.com/js/plusone.js?onload=render'; 
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); 
})(); 

function render() 
{ 
     var config = { 
      "callback": "loginCallback", 
      "clientid": "xxxxxxxxx.apps.googleusercontent.com", 
      "cookiepolicy": "single_host_origin", 
      "requestvisibleactions": "http://schemas.google.com/AddActivity", 
      "scope": "https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.email" 
      }; 

      $('#googleCustomLoginBtn .buttonText').text('Login with Google'); 
      gapi.signin.render ("gplusLoginBtn", config); 
     } 
</script> 

Khi thanh công cụ (với API G + JS) nạp nó gọi hàm gọi lại render() để hiển thị nút đăng nhập G +. Nó hoạt động rất tốt nên thanh công cụ của tôi thay đổi thành trạng thái đăng nhập (hiển thị hồ sơ của người dùng) và nút đăng nhập G + đã biến mất (HTML được thay thế).

Khi người dùng đăng xuất thanh công cụ thay đổi trạng thái để không đăng nhập (HTML được thay thế một lần nữa), nó gọi render() một lần nữa và nút đăng nhập hoạt động.

Nhưng vấn đề là khi tôi đăng nhập lần này chức năng gọi lại (loginCallback()) gọi hai lần. Có vẻ như chức năng gọi lại liên kết lại. (Tôi cố gắng không gọi hàm render() lần thứ hai nhưng nút đăng nhập không hoạt động.)

Có cách nào để khắc phục sự cố không? Cảm ơn bạn.

+0

Bạn đã thử kiểm tra thứ tự trong đó tất cả các chức năng được thực hiện? Nó khá đơn giản để làm bằng cách chỉ cần xuất ra tên hàm để bàn điều khiển ở đầu mỗi hàm. Nó sẽ cung cấp cho bạn (và tôi) một số cái nhìn sâu sắc hơn vào những gì chính xác là hạnh phúc. Ngoài ra: bạn có thể tạo một bản demo jsfiddle.net không? Bằng cách đó, chúng tôi có thể thực sự cố gắng đưa ra một số mã giúp bạn. – Korijn

+0

Bạn đã giải quyết vấn đề này chưa? Nếu có, bạn có thể chia sẻ giải pháp không? –

+1

Có thể là do Google cố đăng nhập tự động khi bạn kết nối với Google+ của mình và trước đó đã ủy quyền ứng dụng. hãy thử kiểm tra nó ở chế độ ẩn danh với tài khoản của bạn đã đăng xuất. –

Trả lời

1

Hơi mới ở đây nhưng tôi nhớ đọc ở đâu đó có trường hợp bạn có thể vô tình gọi hàm này nhiều lần vì bạn đã liên kết nhiều hơn một phần tử. Bạn đã thử xóa trình xử lý sự kiện trực tiếp trước khi khai báo chưa?

Bằng cách đó, nếu đã có một phiên bản của nó, nó sẽ bị xóa trước khi thêm một số khác.

Something như thế này

$('#randomID').unbind('submit').bind('submit'); 
Các vấn đề liên quan