Google plus 为什么谷歌登录返回“;立即#u失败”;即使用户登录到其他地方?

Google plus 为什么谷歌登录返回“;立即#u失败”;即使用户登录到其他地方?,google-plus,google-login,Google Plus,Google Login,我知道类似的问题,但仍然存在问题: 我还了解,登录回调最初被调用,即使没有检查用户是否登录到其他地方的请求。当用户从其他Google服务在浏览器中注销时,也会正确返回“立即\u失败”。然而,当用户实际上是在另一个选项卡中登录Gmail时,我仍然收到相同的javascript失败 这是一个简单的谷歌登录代码示例。怎么了?。一些信息: 证书: Redirect URIs http://localhost:8000/beta/oauth2callback Javascript Origins

我知道类似的问题,但仍然存在问题:

我还了解,登录回调最初被调用,即使没有检查用户是否登录到其他地方的请求。当用户从其他Google服务在浏览器中注销时,也会正确返回“立即\u失败”。然而,当用户实际上是在另一个选项卡中登录Gmail时,我仍然收到相同的javascript失败

这是一个简单的谷歌登录代码示例。怎么了?。一些信息:

证书:

Redirect URIs http://localhost:8000/beta/oauth2callback
Javascript Origins http://localhost:8000
相关代码(仅Javascript登录,从以下位置复制并稍作修改:)

按钮声明:

   <div class="g-signin" data-callback="loginFinished"
    data-clientid="268583......"
    data-scope="profile email"
    data-cookiepolicy="single_host_origin"
    >
'; toggleDiv(“登录按钮”); }否则{ document.getElementById('oauth2-results').innerHTML= “错误”; } }; 完整代码(由Apache在本地提供:8000/test0/signin_demo_basic.htm)


谷歌+登录按钮演示
html,正文{边距:0;填充:0;}
#登录按钮{
填充物:5px;
}
#oauth2在{margin:0;padding:0;}之前的结果
.hide{display:none;}
.show{display:block;}
var loginFinished=函数(authResult){
console.log(authResult)
if(authResult['code']){
var el=document.getElementById('oauth2-results');
var标签=“”;
toggleDiv('oauth2-results');
如果(authResult['status']['signed_in']){
标签='用户授权访问:';
gapi.auth.setToken(authResult);
}否则{
标签='拒绝访问:'+authResult['error'];
}
el.innerHTML=
标签+“
”+
//JSON.stringify在IE8中不起作用。
“{
”+ “id_标记”:“+authResult['id_标记']+”,
+ ““访问令牌”:“+authResult['access\u-token']+”,
”+ ““状态”:“+authResult['state']+”,
”+ ““expires_in”:“+authResult['expires_in']+',
”+ ““错误”:“+authResult['error']+”,
”+ ““错误描述”:“+authResult['error\u description']+”,
”+ ““authUser”:“+authResult['authUser']+”,
”+ ““状态”:{”+'
”+ “谷歌登录”:“+authResult['status']['google谷歌登录']+',
”+ “方法”:“+authResult['status']['method']+',
”+ ““已登录”:“+authResult['status']['signed_in']+'”
”+ “}
”+ “}
”; toggleDiv(“登录按钮”); }否则{ document.getElementById('oauth2-results').innerHTML= “错误”; } }; 函数切换DIV(id){ var div=document.getElementById(id); if(div.getAttribute('class')=='hide'){ div.setAttribute('class','show'); }否则{ div.setAttribute('class','hide'); } } 或
在痛苦地检查我的代码并寻找答案后,我发现在我的Firefox中,接受第三方Cookie的选项被禁用。要解决此问题,请在Firefox中转到选项>隐私并设置“接受第三方Cookie”“去拜访。请告知自己接受第三方Cookie意味着什么。

对于任何只在IE上有问题的人,将
窗口中的
immediate
键.gapi.auth.authorize
设为false并尝试一下。

我在Firefox和Chrome上都有同样的问题,尽管第三方Cookie被接受。我最初登录并通过我的扩展给予许可,然后转到我的web应用程序并获得“立即失败”。当我查看权限时,它们就在那里。当我加载另一个谷歌应用程序时,我已登录。自从你发布了这个,你有没有找到更好的解决方案?没有,我没有找到其他的
var loginFinished = function(authResult) {

    console.log(authResult)

    if (authResult['code']) {
      var el = document.getElementById('oauth2-results');
      var label = '';
      toggleDiv('oauth2-results');
      if (authResult['status']['signed_in']) {
        label = 'User granted access:';
        gapi.auth.setToken(authResult);
      } else {
        label = 'Access denied: ' + authResult['error'];
      }
      el.innerHTML =
          label + '<pre class="prettyprint"><code>' +
          // ..
          '}</code></pre>';
      toggleDiv('signin-button');
    } else {
      document.getElementById('oauth2-results').innerHTML =
          'Error';
    }
  };
<html>
<head>
  <title>Google+ Sign-in button demo</title>
  <style type="text/css">
  html, body { margin: 0; padding:0;}
  #signin-button {
   padding: 5px;
  }

  #oauth2-results pre { margin: 0; padding:0;}
  .hide { display: none;}
  .show { display: block;}
  </style>
  <script type="text/javascript">

  var loginFinished = function(authResult) {

    console.log(authResult)

    if (authResult['code']) {
      var el = document.getElementById('oauth2-results');
      var label = '';
      toggleDiv('oauth2-results');
      if (authResult['status']['signed_in']) {
        label = 'User granted access:';
        gapi.auth.setToken(authResult);
      } else {
        label = 'Access denied: ' + authResult['error'];
      }
      el.innerHTML =
          label + '<pre class="prettyprint"><code>' +
          // JSON.stringify doesn't work in IE8.
          '{<br />' +
          '  "id_token" : "' + authResult['id_token'] +'",<br />' +
          '  "access_token" : "' + authResult['access_token'] + '",<br />' +
          '  "state" : "' + authResult['state'] + '",<br />' +
          '  "expires_in" : "' + authResult['expires_in'] + '",<br />' +
          '  "error" : "' + authResult['error'] + '",<br />' +
          '  "error_description" : "' + authResult['error_description'] + '",<br />' +
          '  "authUser" : "' + authResult['authuser'] + '",<br />' +
          '  "status" : {"' + '<br />' +
          '    "google_logged_in" : "' + authResult['status']['google_logged_in'] + '",<br />' +
          '    "method" : "' + authResult['status']['method'] + '",<br />' +
          '    "signed_in" : "' + authResult['status']['signed_in'] + '"<br />' +
          '  }<br />' +
          '}</code></pre>';
      toggleDiv('signin-button');
    } else {
      document.getElementById('oauth2-results').innerHTML =
          'Error';
    }
  };

  function toggleDiv(id) {
    var div = document.getElementById(id);
    if (div.getAttribute('class') == 'hide') {
      div.setAttribute('class', 'show');
    } else {
      div.setAttribute('class', 'hide');
    }
  }
  </script>
  <script src="https://plus.google.com/js/client:platform.js" type="text/javascript"></script>
</head>
<body>
  <div id="signin-button" class="show">
   <div class="g-signin" data-callback="loginFinished"
    data-clientid="268583......"
    data-scope="profile email"
    data-cookiepolicy="single_host_origin"
    >
  </div>
  </div>
  <div id="oauth2-results" class="hide"></div>
  <div><a href="javascript:document.location.reload();">Reload the example</a> or <a
    href="/+/demos/signin_demo_basic" target="_blank">open in a new window</a></div>
</body>
</html>