【问题标题】:Google Plus api calls not authenticatedGoogle Plus api 调用未经过身份验证
【发布时间】:2013-10-17 20:23:22
【问题描述】:

我正在开发一个带有两个简单页面和 google plus 集成的原型。我有两个页面,第一个带有“登录”按钮,第二个带有链接。当用户点击登录按钮时,我正在调用:

var params = {"client_id":"<client_id>", "scope":"https://www.googleapis.com/auth/plus.login"}; 
gapi.auth.authorize(params, signinCallback);

signinCallback 看起来像这样:

var signinCallback = function(authResult) {
  if (authResult['access_token']) {
    gapi.auth.setToken(authResult);

    gapi.client.load('plus','v1', function(){
      var request = gapi.client.plus.people.list({
        'userId': 'me',
        'collection': 'visible'
      });

      request.execute(function(resp) {
        console.log(resp);
      });
    });

  } else if (authResult['error']) {
      console.error('Sign-in state: ' + authResult['error']);
  }
}

因此,当用户单击按钮、登录并提供应用程序权限时,我将存储令牌并进行人员列表调用。这一切都很完美。

我的问题是当我导航到第二页并尝试拨打与之前相同的电话时:

gapi.client.load('plus','v1', function(){
  var request = gapi.client.plus.people.list({
    'userId': 'me',
    'collection': 'visible'
  });
  request.execute(function(resp) {
    console.log(resp);
  });
});

调用失败,错误为:Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.

我想当我最初注册后执行“setToken”时,我不必继续验证每个后续调用,我做错了什么?

【问题讨论】:

    标签: javascript oauth-2.0 google-plus


    【解决方案1】:

    如果这些确实是两个不同的页面(而不是一个页面对您的服务器进行了一些 AJAX 或其他调用以获取额外数据),那么每个页面都有一个完全不同的 JavaScript 环境。这意味着gapi 对象是每个页面上的不同副本,并且您在第一页上设置的身份验证尚未在第二页上的gapi 对象上设置。您没有为会话设置令牌 - 您是在特定的 JavaScript 对象上设置它。

    如果你使用Google+ Sign In之类的东西,你可以把按钮放在每个页面上,当用户访问它时,每个页面都会得到自己的令牌,但这有点低效,因为它也意味着一个回合-每次访问服务器。

    您可能还可以执行一些操作,例如将身份验证令牌放入临时/会话本地存储中,但在这种情况下您应该小心,令牌不会泄漏并导致安全问题。

    还有其他潜在的解决方案,但归根结底是您打算如何将经过身份验证的用户用作客户端的一部分。

    【讨论】:

      猜你喜欢
      • 2019-09-25
      • 2018-01-14
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多