首页 > 解决方案 > 使用 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 后,它会重定向回 l​​ogin.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');

标签: javascriptjquerygoogle-signin

解决方案


推荐阅读