Wal*_*ers 6 javascript google-api google-login google-oauth google-api-js-client
我正在使用谷歌登录混合流来验证用户,但我有一个奇怪的错误:当用户退出(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...
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在控制台上得到的: console log http://img4.hostingpics.net/pics/968420Capture1.jpg 查看大图
我正在使用的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>
Run Code Online (Sandbox Code Playgroud)
我在两个不同的浏览器上使用两个不同的Google帐户.我最初认为这是由于(谷歌存储在一个cookie中google_account_id和用户状态,如G_USERSTATE_H3 : 'google_account_id#1=0&google_account_id#2=1').但是我在两个浏览器上清除了所有cookie,并且只用了一个浏览器和一个谷歌帐户运行我的测试.我还是得到了这个bug.
这是一个非常讨厌的bug.此外,谷歌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>
Run Code Online (Sandbox Code Playgroud)
这并不完全是一个答案,但每当我使用 Chrome 时,都会出现此错误,但一旦我切换到 Safari,它就消失了。我意识到这可能对OP没有帮助,但以防万一其他人碰巧偶然发现这个线程,请尝试使用不同的浏览器。这对我有用。
| 归档时间: |
|
| 查看次数: |
1077 次 |
| 最近记录: |