Kullanıcıları doğrulamak için Google Giriş karma akışını kullanıyorum ancak garip bir hatam var: Kullanıcılar oturumunu kapattığında (authResult['error'] == 'user_signed_out'
), signInCallback
iki kez çağrılıyor! Kullanıcı oturum açtığında olmaz, bu yüzden (oldukça can sıkıcı) 'Hoş Geldiniz [kullanıcı]' istemiyle bağlantılı olduğunu düşünmüyorum.Google signInCallback, kullanıcı oturum açtığında iki kez çağrıldı
Benim kod şöyle görünür:
function signInCallback(authResult) {
console.log("signIn callback called, using " + authResult['status']['method'] + " method");
console.log("authResult = ");
console.dir(authResult);
if (authResult['code']) {
// do things....
}else if(authResult.error == "user_signed_out"){
// do other things...
}
}
Bu Konsolun üzerinde elde ediyoruz: console log http://img4.hostingpics.net/pics/968420Capture1.jpg See a larger version
kullanıyorum HTML kodu: Ben
<div id="signinButton" style="display:<?=(isset($_SESSION['userinfo'])) ? 'none' : 'inline-block'?>">
<span class="g-signin"
data-scope="<?=join(' ',$scopes)?>"
data-clientid="<?=$client_id?>"
data-redirecturi="<?=$redirect_uri?>"
data-accesstype="<?=$access_type?>"
data-cookiepolicy="<?=$cookie_policy?>"
data-callback="signInCallback"
data-approvalprompt="<?=$approval_prompt?>"
data-state="<?=$_SESSION['state']?>"
></span>
</div>
İki farklı tarayıcıda iki farklı Google Hesabı kullanıyor. Başlangıçta bunun nedeni olduğunu düşündüm (Google, bir çerezde google_account_id ve kullanıcı durumu, G_USERSTATE_H3 : 'google_account_id#1=0&google_account_id#2=1'
gibi). Ancak tüm çerezlerimi her iki tarayıcıda da temizledim ve testlerimi sadece bir tarayıcı açık ve bir google hesabıyla çalıştırdım. Hala bu hatayı alıyorum.
Bu çok sinir bozucu bir böcek. Ayrıca, Google Chrome oldukça iyi bir şekilde ele alıyor, ancak Firefox tamamen çıldırdı ve üç kez geri çağırmayı çalıştırıyor ve kullanıcı giriş yapamıyor (1s için giriş yapmış ve anında yeniden oturum açmış durumda).
Lütfen bana yardım edebilir misiniz?
GÜNCELLEME:
<script>
// Asynchronous load
(function() {
var po = document.createElement('script');
po.type = 'text/javascript';
po.async = true;
po.src = 'https://plus.google.com/js/client:plusone.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(po, s);
})();
</script>
Son noktayı ayrıntılı olarak açıklayabilir misiniz? Bu, yayınınızın geri kalanından biraz farklı gibi görünüyor. Firefox'taki belirtiyi aldıktan hemen sonra giriş çıkış durumunu mı alıyorsunuz? – Prisoner
Konsol günlüklerinin ekran görüntüsünü sağlamak istiyorum ancak maalesef, Firebox'daki 'ekstra' hata tamamen rastgele gerçekleşiyor. Şimdiye kadar, Firefox'umun "çıldırmış modu" nu neyin tetiklediğini belirleyemedim. Çoğu zaman, Google Chrome gibi davranır (örn. SignInCallback iki kez çağrılır, ancak kullanıcı yine de yeniden giriş yapabilir). –
Ama "çıldırmış modda", başlangıçta çıkış yaptım ('error = user_signed_out'), daha sonra Oturum Aç düğmesini tıklıyorum, ardından doğrulama penceresi açılır, sonra hala kaybolabilirim, çünkü hala giriş yaptım Google Hesabımda ve erişimimi iptal etmedikten sonra 'signInCallback' geçerli bir' code' ve 'access_token' alır, ancak' signInCallback' * hemen * bir kez daha 'user_signed_out' hatası ile tekrar çağrılır. –