我正在做一个项目,用户可以使用他们的谷歌帐户登录。登录后,它们将被带到另一个页面,用户可以在多个不同页面之间浏览,每个页面都有一个注销按钮。
我正在尝试实现它,以便如果用户单击注销,他们使用谷歌登录,它从应用程序中注销他们的谷歌帐户,但我不断收到一些奇怪的错误。
<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,但Google似乎没有被注销。当logout.php完成后,它会重定向回login.php,然后使用Google帐户自动登录回我的web应用程序。
作为参考,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');