【问题标题】:Google OAuth2.0 logout not working on localhost but working in consoleGoogle OAuth2.0 注销不在本地主机上工作,但在控制台中工作
【发布时间】:2017-05-23 10:45:24
【问题描述】:

我在我的应用程序中使用Google Auth Login。我的SignIn 按钮在登录页面上,我的注销是我的标题的一部分,它包含在我的整个应用程序中。单击注销按钮时,我无法让用户退出我的应用程序

Login.tpl 代码(包含登录按钮)

<div align="middle" class="g-signin2" data-onsuccess="onSignIn"></div>
<meta name="google-signin-client_id" content="CLIENT_ID">

我可以登录但无法注销。注销按钮是 header.tpl 的一部分,它包含在所有文件中,但我收到上面用粗体标记的错误。

Header.tpl 代码

<meta name="google-signin-client_id" content="CLIENT_ID">

<a href="/users/auth/login" class = "logout"><i class="fa fa-sign-out pull-right"></i> Log Out</a>

我的 JS 代码

    $(".logout").click(function(event) {
event.preventDefault();
gapi.load('auth2', function () {
       var auth2 = gapi.auth2.init({
           client_id: 'CLIENT_ID',
           cookiepolicy: 'single_host_origin'
       });
       auth2.then(function(){
            // this get called right after token manager is started
            auth2.signOut();
            console.log('User signed out.');
       });
    });
window.location = $(this).attr('href');
});

代码永远不会进入定义注销的块,因此我在控制台中也没有得到任何东西。

但是,如果我在控制台中运行此代码,用户会成功注销,但是当我在本地主机上运行应用程序时,这对应用程序不起作用

任何线索将不胜感激。

【问题讨论】:

标签: javascript oauth-2.0 google-oauth google-signin


【解决方案1】:

我找到了解决方案,看来您只能在 signinCallback 触发后调用 signOut 方法。据我所知,触发 signinCallback 的唯一方法是在页面上放置一个登录按钮。

在我的注销按钮所在的位置保留一个隐藏的登录按钮对我有用。

在我的注销按钮所在的 header.tpl 中包含这个

    <div style = "display:none" align="middle" class="g-signin2" data-cookiepolicy='single_host_origin' data-onsuccess="onSignIn"></div>

【讨论】:

    【解决方案2】:

    我能够使用以下代码使其在 localhost 上运行:

    auth2.signOut().then(function () {
       auth2.disconnect();
       gapi.auth2.getAuthInstance().currentUser.get().reloadAuthResponse();
    });
    

    查看this github page上的讨论

    【讨论】:

      猜你喜欢
      • 2018-10-27
      • 2021-12-01
      • 2015-04-09
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      相关资源
      最近更新 更多