Google ログイン ハイブリッド フローを使用してユーザーを認証していますが、奇妙なバグがあります。ユーザーがサインアウトすると ( authResult['error'] == 'user_signed_out'
)、signInCallback
が 2 回呼び出されます。ユーザーがサインインしたときは発生しないため、(かなり面倒な)「Welcome Back [user]」プロンプトにリンクされているとは思いません。
私のコードは次のようになります:
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>
2 つの異なるブラウザで 2 つの異なる Google アカウントを使用しています。私は当初、それが原因だと思っていました (Google は google_account_id とユーザーの状態を cookie に保存しますG_USERSTATE_H3 : 'google_account_id#1=0&google_account_id#2=1'
)。しかし、両方のブラウザーですべての Cookie を消去し、1 つのブラウザーと 1 つの Google アカウントのみを開いてテストを実行しました。私はまだこのバグを取得します。
これは非常に厄介なバグです。さらに、Google Chrome はこれをかなりうまく処理しますが、Firefox は完全にびっくりして、コールバックを 3 回実行し、その後、ユーザーはログインできません (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>