谷歌帐户注销和重定向

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 状态相关的任何内容可能会失败。

以上是关于谷歌帐户注销和重定向的主要内容,如果未能解决你的问题,请参考以下文章

语言 logout and redirect啥意思

当存在要注销的多个帐户时,使用 SimpleSAMLphp 注销到 Azure AD 中的指定网站后不会发生重定向

如何从ios中的谷歌帐户注销?

注销重定向到管理仪表板 laravel

如何在使用 PayPal 购买和重定向后使用 IPN/PDT 显示收据和数字和/或可下载产品

SpringMVC框架如何实现请求转发和重定向呢?