Tôi đang thử làm theo hướng dẫn của Google+ để bắt đầu luồng Đăng nhập bằng Google+ bằng nút của riêng tôi.Google+ Đăng nhập bằng JavaScript - gọi lại hai lần ngay lập tức
Liên quan đến hàm callback, các gapi.auth.signIn tài liệu tham khảo cho biết (trích dẫn):
"Một chức năng trong không gian tên toàn cầu, được gọi là khi nút đăng nhập được trả lại và cũng được gọi sau khi luồng đăng nhập hoàn tất. "
Google Đăng trong hộp thoại xuất hiện, yêu cầu tôi đăng nhập, nhưng khi gọi lại được gọi là hai lần ngay, trước khi bất kỳ sự tương tác được thực hiện với hộp thoại. Cả hai lần tôi nhận được một authResult tương tự, với error = "immediate_failed", error_subtype = "access_denied", status.signed_in = false
Tại sao lại như vậy?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8" />
<script src="https://apis.google.com/js/client:platform.js?onload=googleRender" async defer></script>
</head>
<body>
<script>
function googleRender() { // executed when Google APIs finish loading
var googleSigninParams = {
'clientid' : '746836915266-a016a0hu45sfiouq7mqu5ps2fqsc20l4.apps.googleusercontent.com',
'cookiepolicy' : 'http://civoke.com',
'callback' : googleSigninCallback ,
'requestvisibleactions' : 'http://schema.org/AddAction',
'scope' : 'https://www.googleapis.com/auth/plus.login'
};
var googleSigninButton = document.getElementById('googleSigninButton');
googleSigninButton.addEventListener('click', function() {
gapi.auth.signIn(googleSigninParams);
});
}
function googleSigninCallback(authResult) {
console.log('googleSigninCallback called: ');
console.dir(authResult);
if (authResult['status']['signed_in']) {
document.getElementById('googleSigninButton').setAttribute('style', 'display: none'); // hide button
console.log('User is signed-in to Google');
} else {
console.log('User is NOT signed-in. Sign-in state: ' + authResult['error']);
}
}
</script>
<button id="googleSigninButton">Sign in with Google</button>
</body>
</html>
Trước hết, nó hoạt động (cảm ơn). Hai bình luận mặc dù: (1) Khi không 'PROMPT' tôi nhận được null thay vì 'AUTO'; (2) Điều này vẫn không giải thích tại sao nó được gọi là ** hai lần ** vì không có hai thay đổi trạng thái ngay lập tức ... –
Tôi đã xé tóc ra với cái này. Cảm ơn. – Keab42