javascript - 使用 Google 登录按钮退出网站
问题描述
我正在开发一个项目,用户可以使用他们的 Google 帐户登录。一旦他们登录,他们就会被带到另一个页面,用户可以在多个不同的页面之间浏览,每个页面都有一个注销按钮。
我正在尝试实现它,以便如果用户单击注销,并且他们使用 Google 登录,它会从应用程序中注销他们的 Google 帐户,但我不断收到一些奇怪的错误。
每个页面都有包含我的客户端 ID 的元标记,如下所示:
<meta name="google-signin-client_id" content="OMITTED-CLIENT-ID.apps.googleusercontent.com">
每个页面都包含如下platform.js:
<script src="https://apis.google.com/js/platform.js" async defer></script>
单击注销时,我检查用户是否使用了 Google 登录,如果是,则初始化 auth2 并尝试按如下方式注销:
if (getCookie("UsingGoogleSignIn") === "1")
{
gapi.load('auth2', function() {
gapi.auth2.init();
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function(){
alert("Successfully Logged Out");
//window.location = "/logout.php/state=not_logged_in";
});
});
}
我回来的错误是
Uncaught Error: nb
at tE (cb=gapi.loaded_0:192)
at jF.<anonymous> (cb=gapi.loaded_0:237)
at new _.C (cb=gapi.loaded_0:111)
at jF.BT (cb=gapi.loaded_0:237)
at Ay.Qv.a.(anonymous function) [as signOut] (https://apis.google.com/_/scs/apps-static/_/js/k=oz.gapi.en_GB.GSouU9gH1pU.O/m=auth2/rt=j/sv=1/d=1/ed=1/am=QQ/rs=AGLTcCNXlVeYtOxUtk6wkVB3WmvUfICGTA/cb=gapi.loaded_0:218:203)
at HelperFunctions.js:195
at platform.js:18
at Oa (platform.js:10)
at b (platform.js:18)
at Array.E.(anonymous function) (https://apis.google.com/js/platform.js:18:292)
在堆栈中,行 HelperFunctions.js:195 是我的代码中的以下行:
auth2.signOut().then(function(){
更新
我部分地解决了这个问题,我应该在 init 函数中使用 promise 然后触发注销,所以我的代码现在如下所示:
gapi.load('auth2', function() {
gapi.auth2.init().then(function(){
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function(){
window.location = "/logout.php/state=not_logged_in";
});
});
});
这现在似乎确实有效,它重定向到 /logout.php 但谷歌似乎没有退出。完成 logout.php 后,它会重定向回 login.php,然后使用 Google 帐户自动重新登录我的网络应用程序。
作为参考,PHP logout.php 包含以下内容:
session_start();
unset($_COOKIE["ClientID"]);
setcookie("ClientID", null, -1, '/');
unset($_SESSION["ClientID"]);
unset($_SESSION["AuthToken"]);
unset($_SESSION["UserID"]);
session_destroy();
header('Location: /login.php?state=not_logged_in');
解决方案
推荐阅读
- python - Tensorflow 1.11 估计器 + 数据集训练速度低且不规则
- python - Scrapy - 如何在使用脚本启动蜘蛛时加载项目级别的 settings.py
- java - 如果选中 JCheckbox,则更新 JTable 中的 JProgressbar
- angular - Click 事件未在 Angular 2 中使用的数据表的每一行的按钮上触发
- javascript - 如何在 HTML 表单中获取数据输入的时间戳
- postgresql - 连续统计postgresql数据
- node.js - node.js i18n - 无法读取未定义的属性“toLowerCase”
- php - 限制 wordpress 用户对文件夹和 php 文件的访问
- azure-iot-hub - 尝试使用自己的 x509 证书运行 azure-iot-sdk-java provisioning-x509-sample
- wso2 - 服务器 wso2 没有响应