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
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>