6

我正在使用 Google 登录混合流程对用户进行身份验证,但我有一个奇怪的错误:当用户退出 ( 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...
    }
}

这是我在控制台上得到的: 查看更大的版本控制台日志

我正在使用的 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 帐户。我最初认为是因为这个(Google 将 google_account_id 和用户状态存储在 cookie 中,例如G_USERSTATE_H3 : 'google_account_id#1=0&google_account_id#2=1')。但是我清除了两个浏览器上的所有 cookie,并且只打开了一个浏览器和一个谷歌帐户来运行我的测试。我仍然得到这个错误。

这是一个非常烦人的错误。另外,谷歌浏览器处理得很好,但是火狐完全被吓坏了,执行了3次回调,然后,用户无法登录(他登录了1s,然后立即重新退出)。

有人可以帮我吗?

更新:这是包含 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>
4

1 回答 1

0

这不完全是一个答案,但每当我使用 Chrome 时,就会出现这个错误,但一旦我切换到 Safari,它就消失了。我意识到这可能对 OP 没有帮助,但以防万一其他人偶然发现这个线程,请尝试使用不同的浏览器。它对我有用。

于 2014-09-08T18:44:23.603 回答