Google 登录 API - 如何使用 PHP 注销某人?

Posted

技术标签:

【中文标题】Google 登录 API - 如何使用 PHP 注销某人?【英文标题】:Google Sign in API - How do I log someone out with PHP? 【发布时间】:2016-06-23 08:40:37 【问题描述】:

在 Google 的 Integrate Google Sign-In 页面上,底部的部分显示了如何使用 javascript 将用户注销:

<a href="#" onclick="signOut();">Sign out</a>
<script>
  function signOut() 
    var auth2 = gapi.auth2.getAuthInstance();
    auth2.signOut().then(function () 
      console.log('User signed out.');
    );
  
</script>

我一直在寻找,但找不到像这样使用 php 注销用户的方法。

我确实找到了如何让用户完全退出 Google,但我不想这样做。我也知道我可以删除保存访问代码的$_SESSION 变量,但这仍然不是我想要的。

有人知道如何使用 PHP 将某人从我的 Google 应用程序中注销吗?

【问题讨论】:

【参考方案1】:

这应该可行,我解决了 Mark Guinn 代码的问题,即 gapi.auth2.init(); 方法的任务没有完成执行。 .then()'ing 它解决了这个问题。

<?php 
    session_start();
    session_unset();
    session_destroy();
?>
<html>
    <head>
        <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
    </head>
    <body>
        <script src="https://apis.google.com/js/platform.js?onload=onLoadCallback" async defer></script>
        <script>
            window.onLoadCallback = function()
                gapi.load('auth2', function() 
                    gapi.auth2.init().then(function()
                        var auth2 = gapi.auth2.getAuthInstance();
                        auth2.signOut().then(function () 
                            document.location.href = 'login.php';
                        );
                    );
                );
            ;
        </script>
    </body>
</html>

【讨论】:

我希望我能投票两次。找了好久【参考方案2】:

JavaScript 是为不同于您的域操作 cookie 的唯一方法。

【讨论】:

那么上面的脚本只是删除了cookie?【参考方案3】:

检查一下它对你有用

header('Location:https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.domain.com');

【讨论】:

【参考方案4】:

如果您还打算在服务器端通过auth2.signOut() 注销用户,check out this code(虽然它是 python,但您应该明白这一点)。

app.signOut = function() 
  // Get `GoogleAuth` instance
  var auth2 = gapi.auth2.getAuthInstance();
  // Sign-Out
  fetch('/signout', 
    method: 'POST',
    credentials: 'include'
  ).then(function(resp) 
    if (resp.status === 200) 
      auth2.signOut()
      .then(changeProfile);
     else 
      console.error("couldn't sign out");
    
  ).catch(function(error) 
    console.error(error);
  );
;

And this one

@app.route('/signout', methods=['POST'])
def signout():
    # Terminate sessions
    session.pop('id', None)

    return make_response('', 200)

这取决于您如何构建会话,但您可以在 signOut() 之前向服务器发送 ajax 请求。

【讨论】:

【参考方案5】:

你为什么不让你的退出脚本看起来像这样:

<?php
session_start();
session_unset();
session_destroy();
?>
<html>
   <head>
     <meta name="google-signin-client_id" content="YOUR_CLIENT_ID">
   </head>
   <body>
     <script src="https://apis.google.com/js/platform.js?onload=onLoadCallback" async defer></script>
     <script>
       window.onLoadCallback = function()
         gapi.load('auth2', function() 
           gapi.auth2.init();
           var auth2 = gapi.auth2.getAuthInstance();
           auth2.signOut().then(function () 
             document.location.href = 'login.php';
           );
         );
       ;
     </script>
   </body>
 </html>

【讨论】:

javascript控制台出现错误:ReferenceError: Can't find variable: gap 你在加载google api吗?您是否尝试过我使用 window.load 或 onready 处理程序的建议? 正确,所以 api 没有加载。看起来你需要做这样的事情:***.com/questions/31144874/…(也更新我的答案) 现在它正在返回TypeError: undefined is not an object (evaluating 'gapi.auth2.getAuthInstance') 对不起,我以为你以前真的使用过这个库...查看要发布的编辑。确保在显示 YOUR_CLIENT_ID 的位置填写您的客户 ID。

以上是关于Google 登录 API - 如何使用 PHP 注销某人?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不登录的情况下使用 google api 获取分析数据?

Google API Oauth php 永久访问

Google API PHP 客户端授权

使用 Google 登录通过 Firebase 签名后如何访问课堂 API

如何创建 Microsoft 帐户登录到我的网站,类似于 Google?

如何让服务器访问Google Calendar API?