Oauth 2.0 如何在Dart中使用Oauth2在Google Fusion表中进行身份验证?

Oauth 2.0 如何在Dart中使用Oauth2在Google Fusion表中进行身份验证?,oauth-2.0,dart,google-fusion-tables,google-oauth,Oauth 2.0,Dart,Google Fusion Tables,Google Oauth,我正试图从融合表中获取数据。我写,正如它写在 但身份验证不起作用: 加载资源失败:服务器响应状态为403 (禁止) 作为“>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%20Photo%2C%20ROWID%20from%201bSQ

我正试图从融合表中获取数据。我写,正如它写在

但身份验证不起作用:

加载资源失败:服务器响应状态为403 (禁止)
作为“>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%20Photo%2C%20ROWID%20from%201bSQ16GyMgRuleMBdn1aF4Xfu0E3HRv_As 未捕获错误:APIRestException:403的每日限额 超出未经验证的使用。继续使用需要注册。 例外:APIRestException:403未经验证的每日限额 超出使用范围。继续使用需要注册。未定义 (未定义:0:0)


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

您需要先进行身份验证,然后才能对融合表执行方法。在下面的示例代码中,在身份验证成功时,调用
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());
  }
}

在对融合表执行方法之前,您需要先进行身份验证。在下面的示例代码中,当身份验证成功时,调用
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());
  }
}

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

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

似乎已达到API使用限制:“APIRestException:403超出未经验证使用的每日限制。继续使用需要注册。“为了执行更多调用,您需要向已注册用户进行身份验证。根据网站上的文档,您需要首先在GoogleOAuth2对象上调用“login”,或将autoLogin设置为true。您还需要将回调设置为“tokenLoaded”。当收到有效令牌时,将调用此方法。在此之后,您可以调用fusiontables对象上的方法。似乎已达到API使用的限制:“APIRequestException:403未经身份验证的使用超出每日限制。继续使用需要注册。”您需要向注册用户进行身份验证以执行更多调用。根据网站上的文档,您需要调用“login”首先在GoogleOAuth2对象上,或者将autoLogin设置为true。您还需要将回调设置为“tokenLoaded”。当收到有效令牌时,将调用此方法。在此之后,可以对fusiontables对象调用该方法。