使用Google登录按钮退出网站

时间:2018-11-09 21:25:25

标签: javascript jquery google-signin

我正在研究一个项目,用户可以在该项目中使用他们的Google帐户登录。登录后,他们将转到另一个页面,用户可以在多个不同页面之间浏览,每个页面都有一个注销按钮。

我正在尝试实现该功能,以便如果用户单击注销并使用Google登录,它将从应用程序中注销其Google帐户,但我仍然遇到一些奇怪的错误。

每个页面的meta标签都包含我的客户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 Signin,如果是,则初始化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');

0 个答案:

没有答案