質問

JS経由でGoogleログインを使用していて、コードがデータを2回取得しているようです。なぜこれが発生しているのかわかりません。

Googleでログインすると、ユーザーの急上昇(console.log(結果))データが表示されます。それから、私に私のアカウントを選択するように頼むように促します(私はいくつかのGoogleアカウントにログインしています)。私があなたが欲しいアカウントをクリックすると、コードはそのユーザーデータを再び停止します。

これはなぜ発生しているのですか?データを吐き出す場所は、ユーザーを確認してからそれらをリダイレクトするためにAjax呼び出しをしたいのです。それで本質的には、それはこの2回をやろうとしています - それはクールではない、私がログインしたくないのは、Googleは最初の行順に戻りますか?

(function() {
   var po = document.createElement('script');
   po.type = 'text/javascript'; po.async = true;
   po.src = 'https://apis.google.com/js/client:plusone.js';
   var s = document.getElementsByTagName('script')[0];
   s.parentNode.insertBefore(po, s);
 })();

function googleLogin() {
    var additionalParams = {
        'callback': googleCallback
    };

    gapi.auth.signIn(additionalParams);
}

function googleCallback(authResult) {
    if (authResult['status']['signed_in']) {
        gapi.client.load('oauth2', 'v2', function() {
            gapi.client.oauth2.userinfo.get().execute(function(resp) {
                console.log(resp);
            })
        });
    } else {
        console.log('Sign-in state: ' + authResult['error']);
    }
}
.

アップデート:私がすべてのGoogleアカウントからサインアウトした場合(1つだけを除く)、Googleへの呼び出しはまだ重複しています。今回はログインし、console.log()を2回出力します。アクセストークンは同一です。

更新2: console.log(Resp)が2回

の出力

アップデート3:まさに明確化:

firebug

役に立ちましたか?

解決

「console.log(Resp)」への2つの呼び出しに遭遇しています。 "GoogleCallback"関数内では:

あなたのサインインコールバックを定義する関数は呼び出されます ユーザーがステータスが変更された毎回

この引用は、「ユーザのセッション状態の監視」から取得されます。 a>ウェブページ。

記事で見ることができるように、許可結果オブジェクトには3つの異なるステータス "メソッド"値があります:

だからコールバックコードは、ログインプロンプトが表示されたとき( "プロンプト")、および「歓迎戻し」バナーが表示されたとき( "auto")のときにトリガされています( "auto")。

コールバックコードを各トリガイベントに対処するのを止めるには、コードを次のように変更できます。

function signinCallback(authResult) {
    if (authResult['status']['signed_in']) {
        // Update the app to reflect a signed in user
        // Hide the sign-in button now that the user is authorized, for example:
        // document.getElementById('signinButton').setAttribute('style', 'display: none');

        if (authResult['status']['method'] == 'PROMPT') {
            console.log(authResult['status']['method']);

            gapi.client.load('oauth2', 'v2', function () {
                gapi.client.oauth2.userinfo.get().execute(function (resp) {
                    console.log(resp);
                })
            });
        }
    } else {
        // Update the app to reflect a signed out user
        // Possible error values:
        //   "user_signed_out" - User is signed-out
        //   "access_denied" - User denied access to your app
        //   "immediate_failed" - Could not automatically log-in the user
        console.log('Sign-in state: ' + authResult['error']);
    }
}
.

このコードは、ユーザがサインインしている場合にのみ「gapi.client.oauth2.userinfo.get()」関数を呼び出し、コールバックをトリガーしたイベントが "prompt"の型です。

他のヒント

Googleは常にステータスの「プロンプト」を通過しますが、ユーザーが以前の成功ログインを持っているときには、ステータス「自動」を通して、自動的にログインすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top