用户为signed_out时,Google signInCallback会调用两次

时间:2014-06-05 09:15:00

标签: javascript google-api google-oauth google-login google-api-js-client

我正在使用Google Login混合流来验证用户,但我有一个奇怪的错误:当用户退出(authResult['error'] == 'user_signed_out')时,signInCallback会被调用两次! 当用户登录时不会发生这种情况,所以我认为它不会与(相当讨厌的)“欢迎回来[用户]”提示相关联。

我的代码如下所示:

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

这是我在控制台上得到的: console log http://img4.hostingpics.net/pics/968420Capture1.jpg See a larger version

我正在使用的HTML代码:

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

我在两个不同的浏览器上使用两个不同的Google帐户。我最初认为这是由于那个原因(谷歌在一个cookie中存储了google_account_id和用户状态,如G_USERSTATE_H3 : 'google_account_id#1=0&google_account_id#2=1')。但是我在两个浏览器上清除了所有cookie,并且只用了一个浏览器和一个谷歌帐户运行我的测试。我仍然得到这个错误。

这是一个非常烦人的错误。此外,谷歌Chrome处理它很好,但Firefox完全吓坏了并执行三次回调,然后,用户无法登录(他已登录1秒,并立即重新注销)。

有人可以帮帮我吗?

更新:这是Google JS Api的包含方式:

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

1 个答案:

答案 0 :(得分:0)

这不是一个答案,但每当我使用Chrome时都会出现此错误,但只要我切换到Safari就会消失。我意识到这可能对OP没有帮助,但是为了防止其他人碰巧遇到这个线程,尝试使用不同的浏览器。它对我有用。