我正在使用 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>