我正在使用 openid 登录用户。(仅限谷歌帐户)。现在我的页面中有一个退出链接,单击该链接时,我希望用户退出谷歌帐户并将页面重定向到我的主页。这可以做到吗?
编辑 -
更改接受的答案,因为现在 Google 允许将 [继续] 重定向到您想要的任何域。
当用户单击注销链接时,我已经解决了调用此函数的问题:
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 ”。
我希望这会有所帮助。
挑战
请求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 上的某些属性(我不确定哪些会起作用,因为您在这里跨站点工作)。
另见这些问题:
由于我在我的应用程序(这是一个 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 解决方案应该比我的更好。
我一直在尝试做同样的事情。仅适用于谷歌应用程序 -
要注销,请尝试以下两个选项:
1) 使用 i-frame -
<iframe src="https://mail.google.com/a/YOURDOMAIN.IN/?logout&hl=en" width="100%" height="300">
<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>
这就是我所做的,不记得是我编造的还是在某个地方找到的......它就像一个魅力......除了它让你退出所有谷歌网站的事实(我不敢相信他们没有提供正确的方法来做到这一点,但是你去。)
<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>
我使用此代码从谷歌帐户注销。它会抛出一个错误,但不用担心,它会在错误发生后立即重定向到您的应用程序服务器端注销路由。
<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>
我只需要做同样的事情,注销用户。不知何故,接受的答案对我不起作用,我从谷歌得到一个错误
The page you requested is invalid.
所以我最终把它放到了我的页面中:
<img src="https://www.google.com/accounts/Logout" />
成功注销用户。来源
我不知道我做的是否正确。但我设法使用这样的代码:
<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>