我正在使用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>
答案 0 :(得分:0)
这不是一个答案,但每当我使用Chrome时都会出现此错误,但只要我切换到Safari就会消失。我意识到这可能对OP没有帮助,但是为了防止其他人碰巧遇到这个线程,尝试使用不同的浏览器。它对我有用。