我正在使用google通过js登录,它看起来我的代码是越来越多的。我不确定为什么会发生。

当我单击我的“使用Google登录”按钮时,它会吐出(Console.log(结果))用户的数据。然后发生一个提示要求我选择我的帐户(我登录了几个Google帐户)。当我点击我想要的帐户时,代码然后再次吐出用户数据。

为什么发生这种情况?这是一个问题,因为我吐出了数据的地方,我想制作一个ajax调用来验证用户,然后重定向它们。所以实质上,它试图做两次 - 这是不冷却的,如果我不想使用凭据使用谷歌传递回到第一个转到的凭据?

(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帐户(除了一个且只有一个例外),对谷歌的调用仍然复制。这次它登录,我看到了两次输出数据的console.log()。访问令牌是相同的。

更新2: console.log(RESP)正在输出两次

更新3:更澄清:

有帮助吗?

解决方案

您正在遇到两个调用“console.log(RESP);”在“googlecallback”功能中,因为:

将调用您为登录回调定义的函数 每次用户在状态更改中签名

此报价由监视用户的会话状态“网页。

在文章中可以看到,授权结果对象具有三种不同的状态“方法”值:

所以当登录提示出现(“提示”)时触发您的回调代码(“提示”),当出现“欢迎后退”横幅时(“自动”)。

要停止回调代码处理每个触发器事件,您可以如下更改代码:

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()”功能如果用户登录,则触发回调的事件是“提示”类型。

其他提示

谷歌始终通过状态'提示',但通过状态'auto'只是当用户有先前的成功登录时,他可以自动登录。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top