谷歌帐户注销和重定向
Posted
技术标签:
【中文标题】谷歌帐户注销和重定向【英文标题】:google account logout and redirect 【发布时间】:2011-05-11 06:30:29 【问题描述】:我正在使用 openid 登录用户。(仅限 Google 帐户)。 现在我的页面中有一个退出链接,单击该链接时,我希望用户退出谷歌帐户并将页面重定向到我的主页。 这个可以吗??
编辑- 更改接受的答案,因为现在 Google 允许将 [继续] 重定向到您想要的任何域。
【问题讨论】:
【参考方案1】:我使用此代码从 google 帐户注销。它会抛出一个错误但不用担心,它会在错误发生后立即重定向到您的应用程序服务器端注销路由。
<a href="https://www.google.com/accounts/Logout" target="myiframe">logout</a>
<iframe name="myiframe" style="display:none" onload="redirect()"></iframe>
<script>
function redirect()
window.location = 'http://your.site.com/signout';
;
</script>
【讨论】:
【参考方案2】:我不知道我做的是否正确。但我设法使用这样的代码:
<a class="btn btn-default navbar-btn text-white" id="signOut" href="../home.html" onclick="signOut('https://www.google.com/accounts/Logout');">Sign out</a>
<script>
function signOut()
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function ()
console.log('User signed out.');
);
firebase.auth().signOut().then(function()
// Sign-out successful.
alert('You have Signed Out. Please Sign In');
).catch(function(error)
// An error happened.
alert('An error happened');
);
</script>
【讨论】:
发生错误后是继续到home.html还是停留在那里?【参考方案3】:我已经解决了当用户点击注销链接时调用这个函数的问题:
var logout = function()
document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com";
当用户点击链接时,浏览器将用户重定向到注销页面,只有在注销完成后,用户才会被重定向到站点“http://www.example.com”。
我希望这会有所帮助。
【讨论】:
好的,你的意思是谷歌现在允许你“继续”进入任何域吗? 我没有尝试是否可以继续进入任何域。我只尝试了发送请求的域。 @Shrinath:是的,现在谷歌允许。所以,这个答案是完美的方式:-) 在重定向回您的应用程序时使用appengine.google.com
作为中间人现在可以工作,但我找不到此端点的任何文档。谨慎使用。
这不再起作用了。这是预期的行为,please check this case for answer【参考方案4】:
这就是我所做的,不记得是我编造的还是在某个地方找到的......它就像一个魅力......除了它会让你退出所有 Google 网站(我可以'不相信他们没有提供正确的方法来做到这一点,但你去吧。)
<script>
function makeFrame(domId,url)
ifrm = document.createElement("IFRAME");
ifrm.setAttribute("src", url);
ifrm.setAttribute("id", domId);
ifrm.setAttribute("style", "display:none;");
ifrm.style.width = 1+"px";
ifrm.style.height = 1+"px";
document.body.appendChild(ifrm);
function logOutGoogle()
makeFrame('googleLogoutIFrame','https://www.google.com/accounts/Logout');
$(window).ready(function()
logOutGoogle();
);
</script>
【讨论】:
【参考方案5】:由于我在我的应用程序(这是一个 Node/MongoDB 服务器,使用大量 Google Docs 和 Google Script API)的这个 google 登录/注销问题上花费了 大量 时间,我不得不在这里分享我的结果..
完全注销用户的唯一好方法是使用这个:
var newWindow = window.open('https://mail.google.com/mail/?logout&hl=fr','Disconnect from Google','width=100,height=50,menubar=no,status=no,location=no,toolbar=no,scrollbars=no,top=200,left=200');
setTimeout(function()
if (newWindow) newWindow.close();
window.location="auth/google";
,3000);
如果您使用上面由 ira 提供的解决方案,它会在浏览器的当前选项卡上进行部分注销。这意味着如果用户关闭选项卡并重新打开应用程序,他仍将登录到以前的帐户。
我不得不使用外部窗口,因为从电子邮件 google 帐户注销后,我无法正确重定向到我的应用程序。此解决方案在大多数情况下都有效,如果用户带宽不是太慢,则在关闭弹出窗口之前让 3 秒完成注销。然后用户需要在我的主窗口应用程序中使用另一个帐户登录。
这证实了floccinaucinihilipilification的解决方案,也许上面给出的iframe解决方案应该比我的更好。
【讨论】:
这里的优雅解决方案 - 运行良好。似乎比必须管理 iframe 和与之相关的所有东西“更清洁、更轻便”【参考方案6】:我只需要做同样的事情,注销用户。不知何故,接受的答案对我不起作用,我从谷歌得到一个错误
The page you requested is invalid.
所以我最终把它放到了我的页面中:
<img src="https://www.google.com/accounts/Logout" />
成功注销用户。 source
【讨论】:
【参考方案7】:我一直在尝试做同样的事情。仅适用于 Google 应用 - 要注销,请尝试以下两个选项: 1) 使用 i-frame -
<iframe src="https://mail.google.com/a/YOURDOMAIN.IN/?logout&hl=en" >
<p>Your browser does not support iframes.</p>
</iframe>
2) 使用 javascript -
<script type="text/javascript">
window.open('https://mail.google.com/a/YOURDOMAIN.IN/?logout&hl=en','logout_from_google','width=600,height=300,menubar=no,status=no,location=no,toolbar=no,scrollbars=no,top=20,left=20');
</script>
【讨论】:
对不起老兄,这个帖子很久以前就回答过了,他建议了我在那个项目上使用的 iframe 方法......感谢您宝贵的时间:) 嗨。你能告诉我你是怎么做到的吗?我想要做的是发送一个隐藏的请求以从谷歌帐户中注销用户,然后将他带到我想要的任何 php 页面。请帮忙!【参考方案8】:挑战
请求https://www.google.com/accounts/Logout 将注销用户。 Google 有时会向该地址添加一个 continueUrl 参数,但只有当目标是某个 Google 站点而不是您自己的站点时,它才会成功重定向用户。这使得该方法无法使用。
此外,OpenID 规范目前不包括全局注销。
还有一种方法:
建议
在您的页面上包含一个 IFrame,并使用注销链接上的 onClick JavaScript 事件处理程序将 https://www.google.com/accounts/Logout 加载到 IFrame 中。之后(您可能想检查 IFrame 是否加载成功),将用户重定向到您自己站点的注销过程。注销后让该页面重定向到您的主页。
链接可能有点像这样:
<a href="https://www.google.com/accounts/Logout"
onclick="myIFrame.location='https://www.google.com/accounts/Logout';StartPollingForCompletion();return false;">
log out</a>
<iframe id="myIFrame"></iframe>
您需要实现StartPollingForCompletion()
函数来定期检查注销页面是否已加载。使用setTimeout()
来计时投票,并检查 IFrame 上的某些属性(我不确定哪些会起作用,因为您在这里跨站点工作)。
另请参阅以下问题:
OpenID. How do you logout
How to add logout feature to an OpenID enabled site?
【讨论】:
我在想这样的事情:google.com/accounts/Logout" target = "myframe">注销 Lol :DI 之前看过 *** 的线程。我在那里没有得到正确的答案,而且它很旧,所以开了一个新的,希望至少一年后能得到答案:D 顺便说一句,你建议我如何实现“StartPollingForCompletion()”?我目前正在 500 毫秒后在 javascript 中执行重定向,但我知道那是盲目的.. 由于 CORS (XSS) 限制,检查与此类 iframe 状态相关的任何内容可能会失败。以上是关于谷歌帐户注销和重定向的主要内容,如果未能解决你的问题,请参考以下文章
当存在要注销的多个帐户时,使用 SimpleSAMLphp 注销到 Azure AD 中的指定网站后不会发生重定向