Javascript 谷歌+;signinCallback调用了两次并在进程中丢失了authresult

Javascript 谷歌+;signinCallback调用了两次并在进程中丢失了authresult,javascript,html,google-plus,Javascript,Html,Google Plus,我的代码中有一个bug。 我能够登录并检索用户信息。但是,signinCallback再次被调用(我不知道如何调用)。它显示了我之前拥有的用户信息已经消失了! 以下是HTML端: <span id="signinButton"> <span class="g-signin" data-callback="signinCallback" data-clientid="CLIENT_ID" data-cooki

我的代码中有一个bug。 我能够登录并检索用户信息。但是,
signinCallback
再次被调用(我不知道如何调用)。它显示了我之前拥有的用户信息已经消失了! 以下是HTML端:

<span id="signinButton">
    <span
        class="g-signin"
        data-callback="signinCallback"
        data-clientid="CLIENT_ID"
        data-cookiepolicy="single_host_origin"
        data-requestvisibleactions="http://schemas.google.com/AddActivity"
        data-scope="https://www.googleapis.com/auth/plus.profile.emails.read"
        data-width="standard"
        data-height="short">
    </span>
</span>
它在第二次
signcallback

Sign-in state: user_signed_outundefined
signinCallback

回调方法中对request.execute()的调用导致回调方法被错误属性中的“user\u signed\u out”值重新触发

如果你看一下谷歌的文档,它是这样写的:

当用户刷新页面或导航到页面的另一部分时 网站,回调将在 属性,直到用户再次单击登录按钮

因此,我相信是您对request.execute()的调用触发了对回调方法的第二次调用

您可以通过在回调方法中设置一个条件来防止对回调的第二次调用,例如

function signinCallback(authResult) {
 if (authResult['status']['signed_in']) {
  console.dir(authResult);
  console.log('Sign-in state: ' + authResult['error']+authResult['access_token']);
  AuthStates.google = authResult;
  console.log('signinCallback');
  chooseAuthProvider();
 }
}

有关前面提到的防护条件的示例,请参阅上的Google文档。

这可能对您有所帮助

(功能(){ var GOOGLE_PLUS_SCRIPT_URL=''


请尝试在以下位置更新说明:
“第页。

我遇到了一个非常类似的问题。我也在上发布了。您能给我们一个屏幕截图,说明调用signInCallback后,
console.dir(authResult)
输出的内容吗?具体来说,
authResult['status']['method']
在两次调用中的值是什么?authResult['status']['method']=nullWell,那么我们也有同样的问题。你使用多个谷歌帐户吗?是的,我使用多个帐户。顺便说一句,我的问题中添加了屏幕截图。你要报告这个问题吗?已经有答案了。请添加你认为比链接更重要的说明部分谢谢,但所有部分都很重要。
function signinCallback(authResult) {
 if (authResult['status']['signed_in']) {
  console.dir(authResult);
  console.log('Sign-in state: ' + authResult['error']+authResult['access_token']);
  AuthStates.google = authResult;
  console.log('signinCallback');
  chooseAuthProvider();
 }
}
 window.oauth2Callback = function(authResult) {
 if (authResult['access_token']) {
  accessToken = authResult['access_token'];
  $(function() {
$.getScript(GOOGLE_PLUS_SCRIPT_URL);}