6

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

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

+0

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). –

+0

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

cevap

0

Bu tam bir cevap değil, ama Chrome'u her kullandığınızda bu hata oluşur, ama ben Safari geçti en kısa sürede uzağa gitti: Bu, Google JS Api dahildir nasıl . Bunun OP'ye yardımcı olamayacağının farkındayım, ancak bu konuya başka birinin karışması durumunda, farklı bir tarayıcı kullanmayı deneyin. Benim için çalıştı.

İlgili konular