【问题标题】:Authentication on google api (calendar) with flutter使用颤振对 google api(日历)进行身份验证
【发布时间】:2020-10-08 23:10:42
【问题描述】:

我尝试使用 google calendar api 检索事件

import 'package:googleapis_auth/auth_io.dart';
import 'package:http/http.dart' as http;
import 'package:googleapis/calendar/v3.dart' as calendarapi;

...

class _MyHomePageState extends State<MyHomePage> {

  final accountCredentials = new ServiceAccountCredentials.fromJson(
    {
    "private_key_id": "562ab...",
    "private_key": "-----BEGIN PRIVATE KEY--............----END PRIVATE KEY-----\n",
    "client_email": "xxx@xxx.iam.gserviceaccount.com",
    "client_id": "1073.......",
    "type": "service_account",
    "project_id": "myapi"
   }
  );

  final scopes = [calendarapi.CalendarApi.CalendarScope];
  final client = new http.Client();
 

  void getCalendarEvents() { 
      clientViaServiceAccount(accountCredentials, scopes).then((client) {
        var calendar = new calendarapi.CalendarApi(client);
        var calEvents = calendar.events.list("primary");
        calEvents.then((calendarapi.Events events) {
          events.items.forEach((calendarapi.Event event) {print(event.summary);});
        });
          client.close();
      });
  }
}

...

  @override
  void initState() {
    super.initState();
    getCalendarEvents();
  }

clientViaServiceAccount 行抛出异常

FormatException(FormatException:输入意外结束)

凭据应该没问题,因为我已经在不同的客户端中使用了它们。在提琴手中没有传出流量,因此即使在请求发送之前看起来也存在错误。代码有什么问题?

编辑

这是错误的堆栈

══╡ FLUTTER 测试框架════════════════════════════════ ═══════════════以下 运行测试时抛出 FormatException:输入意外结束

当异常被抛出时,这是堆栈: #0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1392:5) #1 _ChunkedJsonParser.close (dart:convert-patch/convert_patch.dart:510:7) #2 _JsonStringDecoderSink.close (dart:convert-patch/convert_patch.dart:1487:13) #3 _ConverterStreamEventSink.close (dart:convert/chunked_conversion.dart:80:18) #15 _StringAdapterSink.close (dart:convert/string_conversion.dart:249:11) #16 _Utf8ConversionSink.close (dart:convert/string_conversion.dart:300:20) #17 _ConverterStreamEventSink.close (dart:convert/chunked_conversion.dart:80:18) #46 AutomatedTestWidgetsFlutterBinding.pump。 (包:flutter_test/src/binding.dart:855:25) #49 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:69:41) #50 AutomatedTestWidgetsFlutterBinding.pump (package:flutter_test/src/binding.dart:840:27) #51 WidgetTester.pumpWidget。 (包:flutter_test/src/widget_tester.dart:318:22) #54 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:69:41) #55 WidgetTester.pumpWidget (package:flutter_test/src/widget_tester.dart:315:27) #56主要。 (file:///C:/projekte/flutter_garden/flutter_garden/test/widget_test.dart:9:18) #58主要。 (file:///C:/projekte/flutter_garden/flutter_garden/test/widget_test.dart:7:43) #59 testWidgets..(包:flutter_test/src/widget_tester.dart:119:25) #61 testWidgets..(包:flutter_test/src/widget_tester.dart:117:9) #62 TestWidgetsFlutterBinding._runTestBody (package:flutter_test/src/binding.dart:648:19) #76 AutomatedTestWidgetsFlutterBinding.runTest。 (包:flutter_test/src/binding.dart:1032:17) #78 AutomatedTestWidgetsFlutterBinding.runTest。 (包:flutter_test/src/binding.dart:1020:35)(省略了 74 帧 _FakeAsync 类、dart:async 包、dart:async-patch 包和 包堆栈跟踪)

【问题讨论】:

  • 我不知道你是否复制了整个代码,但我马上可以看到,在交互后客户端没有右括号`_MyHomePageState, you might want to check on that. If I understood correctly your code is not even executing? Or is the error part of the client getting to the google server. I would say that you already did but if not read [the following page](https://github.com/dart-lang/googleapis_auth), in there is recommended to close`。
  • 我更新了代码。 client.close() 没有改变结果。 getCalendarEvents 在 initState 中调用
  • 但是您的代码是否还在执行/编译?你有没有办法检查你是否向谷歌服务器发出请求?
  • 是的,我通过颤振单元测试运行代码,它正在点击 getCalendarEvents -> clientViaServiceAccount

标签: flutter oauth-2.0 google-api google-calendar-api


【解决方案1】:

通过模拟器而不是单元测试运行代码解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 2021-02-04
    • 2013-06-24
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多