Google OAuth2.0注销不在localhost上工作,但在控制台中工作

时间:2017-01-09 08:08:40

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

我正在使用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');
});

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

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

任何线索都会受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

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

保留一个隐藏的登录按钮,我的注销按钮写在我面前的诀窍。

在header.tpl中包含此内容,其中我的注销按钮已写入

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

答案 1 :(得分:1)

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

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

查看有关this github page

的讨论