【问题标题】:How to authenticate in Google Fusion Tables with Oauth2 in Dart?如何在 Dart 中使用 Oauth2 在 Google Fusion Tables 中进行身份验证?
【发布时间】:2013-10-20 21:05:21
【问题描述】:

我正在尝试从融合表中获取数据。我写的,因为它写在example

import "package:google_fusiontables_v1_api/fusiontables_v1_api_browser.dart";
import "package:google_oauth2_client/google_oauth2_browser.dart";

class CFusionTable
{
  static const _tableName = '*mytablename*';
  static const _clientID = "*myclientid*";

  GoogleOAuth2 _gauth;

  CFusionTable()
  {
    _gauth = new GoogleOAuth2(_clientID, [Fusiontables.FUSIONTABLES_SCOPE]);
     var fusiontables = new Fusiontables(_gauth);
    fusiontables.query.sql('select ID, Name, Latitude, Longitude, Country, Territory, City, Photo, ROWID from '+_tableName,
        hdrs: false)
      .then(_loadData);

  }

  void _loadData(data)
  {
    print (data.toString());
  }
}

但是认证不起作用:

加载资源失败:服务器响应状态为 403 (禁止)
As">https://www.googleapis.com/fusiontables/v1/query?hdrs=false&sql=select%20ID%2C%20Name%2C%20Latitude%2C%20Longitude%2C%20Country%2C%20Territory%2C%20City %2C%20照片%2C%20ROWID%20from%201bSQ16GyMgRuleMBdn1aF4Xfu0E3HRv_As 未捕获的错误:APIRequestException:403 每日限制 已超过未经验证的使用。继续使用需要注册。 异常:APIRequestException:未经身份验证的 403 每日限制 使用超过。继续使用需要注册。不明确的 (未定义:0:0)

请告诉我,我做错了什么?

【问题讨论】:

  • 似乎已达到 API 使用限制:“APIRequestException: 403 已超出未经验证使用的每日限制。继续使用需要注册。”您需要通过注册用户进行身份验证才能执行更多调用。
  • 根据github.com/dart-gde/dart-google-oauth2-library 的文档,您需要首先在 GoogleOAuth2 对象上调用“login”或将 autoLogin 设置为 true。您还需要将回调设置为“tokenLoaded”。收到有效令牌时将调用此方法。在此之后,您可以调用 fusiontables 对象上的方法。

标签: oauth-2.0 dart google-fusion-tables google-oauth


【解决方案1】:

您需要先进行身份验证,然后才能在融合表上执行方法。在下面的示例代码中,当认证成功时,调用login方法调用认证和融合表。

import "package:google_fusiontables_v1_api/fusiontables_v1_api_browser.dart";
import "package:google_oauth2_client/google_oauth2_browser.dart";

class CFusionTable
{
  static const _tableName = '*mytablename*';
  static const _clientID = "*myclientid*";

  GoogleOAuth2 _gauth;

  CFusionTable() {
    _gauth = new GoogleOAuth2(_clientID, [Fusiontables.FUSIONTABLES_SCOPE]);
  }

  void login() {
    _gauth.login().then(_gauth_tokenLoadedHandler);
  }

  void _gauth_tokenLoadedHandler(Token token) {
    var fusiontables = new Fusiontables(_gauth);
    fusiontables.query.sql('select ID, Name, Latitude, Longitude, Country, Territory, City, Photo, ROWID from '+_tableName,hdrs: false)
      .then(_loadData);
  }

  void _loadData(data) {
    print (data.toString());
  }
}

【讨论】:

    【解决方案2】:

    看到 403 时要检查的另一件事是您的客户 ID。许多 Google API 都有速率限制,对于未注册的应用程序,速率限制基本上为零。因此,当您看到 403 时,通常是(a)您没有注册应用程序或(b)您注册了应用程序但在代码中输入了错误的客户端 ID 值或(c)您做了所有这些但注册了您的应用程序对于错误的范围...您会看到模式。

    【讨论】:

      猜你喜欢
      • 2017-08-04
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 2013-06-24
      • 2018-04-30
      相关资源
      最近更新 更多