35

我正在使用 openid 登录用户。(仅限谷歌帐户)。现在我的页面中有一个退出链接,单击该链接时,我希望用户退出谷歌帐户并将页面重定向到我的主页。这可以做到吗?

编辑 -
更改接受的答案,因为现在 Google 允许将 [继续] 重定向到您想要的任何域。

4

8 回答 8

66

当用户单击注销链接时,我已经解决了调用此函数的问题:

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

我希望这会有所帮助。

于 2013-02-12T11:21:52.767 回答
19

挑战

请求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 的站点添加注销功能?

于 2010-11-17T07:26:19.477 回答
2

由于我在我的应用程序(这是一个 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 解决方案应该比我的更好。

于 2015-06-27T21:46:14.317 回答
1

我一直在尝试做同样的事情。仅适用于谷歌应用程序 -
要注销,请尝试以下两个选项:
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>
于 2011-02-14T10:17:30.097 回答
1

这就是我所做的,不记得是我编造的还是在某个地方找到的......它就像一个魅力......除了它让你退出所有谷歌网站的事实(我不敢相信他们没有提供正确的方法来做到这一点,但是你去。)

<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>
于 2016-01-05T04:02:04.000 回答
1

我使用此代码从谷歌帐户注销。它会抛出一个错误,但不用担心,它会在错误发生后立即重定向到您的应用程序服务器端注销路由。

<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>
于 2019-03-30T16:10:14.357 回答
0

我只需要做同样的事情,注销用户。不知何故,接受的答案对我不起作用,我从谷歌得到一个错误

The page you requested is invalid.

所以我最终把它放到了我的页面中:

<img src="https://www.google.com/accounts/Logout" />

成功注销用户。来源

于 2014-03-31T13:01:49.903 回答
0

我不知道我做的是否正确。但我设法使用这样的代码:

<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>
于 2018-09-14T11:00:35.670 回答