1

我正在尝试在我的骨干 js 应用程序中使用 google+ 登录。用户流是这样的

  1. 用户单击登录按钮
  2. 这将使用 google+ 登录按钮(以及 facebook 登录等)打开一个引导程序(thttp://twitter.github.io/bootstrap/)模式
  3. 用户必须明确单击 g+ 登录按钮才能登录我的网站。

为了防止自动 g+ 登录,我所做的是显示一个自定义 g+ 登录按钮并在单击时使用带有该自定义登录按钮的“gapi.signin.render”api 作为容器。这在第一次单击登录按钮时工作正常,但是如果用户注销并尝试重新登录,则第一次单击没有任何反应,但在第二次单击时,g+ 登录被触发两次,并且每次用户注销时增加 1并重新登录。每次 g+ 登录仅在第二次点击时触发。请注意,我的应用程序是单页应用程序,因此在注销和登录之间没有重新加载。如果我重新加载该站点,那么它会在第一次运行时再次出现问题,随后的登录又会出现问题。

注意:我用于显示 g+ 登录按钮的模式(及其 DOM)在每次成功登录后都会被删除,并在每次用户单击主登录按钮时重新创建。我注意到在成功登录后,由 g+ 登录按钮创建的 iframe 仍然存在,并且当我再次重新创建模式并调用“gapi.signin.render”api 调用时可能会产生干扰。

我使用的代码是

在主干视图中,渲染方法具有

render: function() {
        var thisV = this;
        _.defer(function(){
            gapi.signin.render('gSignIn', {
              'callback': thisV.gPlusLoginCB,
              'clientid': "clientID",
              'requestvisibleactions': "http://schemas.google.com/AddActivity",
              'scope': "https://www.googleapis.com/auth/plus.login",
              'theme': 'dark',
              'cookiepolicy': "single_host_origin"
            });
        });
    }

在我的 html 模板中

<button id="gSignIn" class="btn gplogin">
      <i class="icon-google-plus"></i>Login
</button>

关于 G+ 登录呼叫为何排队或如何实施我的方案的任何想法?

谢谢

4

2 回答 2

0

我不知道为什么您应该看到多次身份验证尝试。

你能发布一个你看到这种行为的最小代码示例吗?

作为根据您的描述的猜测,您是否将 g-signin 按钮的自定义渲染与 gapi.signin.render 混合在一起?例如渲染一个自定义按钮:

<span id="signinButton">
  <span
    class="g-signin"
    data-callback="signinCallback"
    data-clientid="CLIENT_ID"
    data-cookiepolicy="single_host_origin"
    data-requestvisibleactions="http://schemas.google.com/AddActivity"
    data-scope="https://www.googleapis.com/auth/plus.login">
    <!-- Custom button markup -->
  </span>
</span>

然后调用例如:

gapi.signin.render('signinButton', {
      //'callback': 'signinCallback',
      'clientid': 'CLIENT_ID',
      'cookiepolicy': 'single_host_origin',
      'requestvisibleactions': 'http://schemas.google.com/AddActivity',
      'scope': 'https://www.googleapis.com/auth/plus.login'
    });
  }
于 2013-04-16T11:18:52.797 回答
0

抱歉这么晚了。我刚刚遇到了完全相同的问题。

当我将options对象的创建移出函数时,一切正常:

var options = {
                  'callback': thisV.gPlusLoginCB,
                  'clientid': "clientID",
                  'requestvisibleactions': "http://schemas.google.com/AddActivity",
                  'scope': "https://www.googleapis.com/auth/plus.login",
                  'theme': 'dark',
                  'cookiepolicy': "single_host_origin"
                }

/**

/**

/**

    render: function() {
            var thisV = this;
            _.defer(function(){
                gapi.signin.render('gSignIn', options );
            });
        }
于 2015-02-18T16:02:07.013 回答