【问题标题】:google account logout and redirect谷歌帐户注销和重定向
【发布时间】:2011-05-11 06:30:29
【问题描述】:

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

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

【问题讨论】:

    标签: openid logout account


    【解决方案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" 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>
          

          【讨论】:

          • 对不起老兄,这个帖子很久以前就回答过了,他建议了我在那个项目上使用的 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 之前看过 stackoverflow 的线程。我在那里没有得到正确的答案,而且它很旧,所以开了一个新的,希望至少一年后能得到答案:D
          • 顺便说一句,你建议我如何实现“StartPollingForCompletion()”?我目前正在 500 毫秒后在 javascript 中执行重定向,但我知道那是盲目的..
          • 由于 CORS (XSS) 限制,检查与此类 iframe 状态相关的任何内容可能会失败。
          猜你喜欢
          • 2016-11-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多