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 登录通过 Firebase 签名后如何访问课堂 API