在Google的集成Google登录页面上,底部有一个部分,向您展示如何使用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应用程序中注销?
这应该有效,我修复了 Mark Guinn 代码的问题,即 gapi.auth2.init();
方法的任务未完成执行。 .then()
它解决了这个问题。
<?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>
JavaScript
是为与您的域不同的域操作 cookie 的唯一方法。
检查一下它对你有用
header('Location:https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.domain.com');
如果您打算在服务器端auth2.signOut()
注销用户,请查看此代码(尽管它是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);
});
};
而这个
@app.route('/signout', methods=['POST'])
def signout():
# Terminate sessions
session.pop('id', None)
return make_response('', 200)
这取决于您如何构建会话,但您可以在signOut()
之前将 ajax 请求发送到服务器。
为什么不让你的注销脚本看起来像这样:
<?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>