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

时间:2016-03-09 05:34:21

标签: javascript php google-signin google-api-php-client

在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应用程序中记录下来?

5 个答案:

答案 0 :(得分:4)

这应该有用,我用Mark Guinn的代码修复了问题,这是gapi.auth2.init();方法的任务没有完成执行的事实。 .next()它解决了这个问题。

<?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>

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您打算在服务器端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请求。

答案 3 :(得分:0)

检查这对你有用

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

答案 4 :(得分:-1)

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

<?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>