代码之家  ›  专栏  ›  技术社区  ›  Boardy

使用谷歌登录按钮注销网站

  •  1
  • Boardy  · 技术社区  · 7 年前

    我正在做一个项目,用户可以使用他们的谷歌帐户登录。登录后,它们将被带到另一个页面,用户可以在多个不同页面之间浏览,每个页面都有一个注销按钮。

    我正在尝试实现它,以便如果用户单击注销,他们使用谷歌登录,它从应用程序中注销他们的谷歌帐户,但我不断收到一些奇怪的错误。

    <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');
    
    0 回复  |  直到 7 年前