始终显示 Google 身份验证页面,如何仅在第一次进行身份验证

时间:2020-12-20 21:11:51

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

我正在使用 googleApi 库制作带有 Flutter 的日历应用。

但是,当您关闭应用程序时,需要在网站中再次进行身份验证。 我只想要第一次认证。

有可能吗?

// 我的代码

get _SCOPES => [CalendarApi.CalendarScope];
  await clientViaUserConsent(_clientID, _SCOPES, prompt)
        .then((AuthClient client) async {
      CalendarClient.calendar = CalendarApi(client);
      calendarId = await CalendarClient.calendar.calendarList
          .list()
          .then((value) => value.items[0].id);
    });

void saveData(AccessCredentials credentials) {
    GetStorage().write(credetialKey, {
      "accessTokenData": credentials.accessToken.data,
      "accessTokenExpiry": credentials.accessToken.expiry.toString(),
      "refreshToken": credentials.refreshToken,
      "scopes": credentials.scopes,
      "idToken": credentials.idToken
    });
  }

  AccessCredentials getCredetial() {
    try {
      var map = GetStorage().read(credetialKey);
      return AccessCredentials(
          AccessToken("Bearer", map["accessTokenData"] as String,
              DateTime.parse(map["accessTokenExpiry"])),
          map["refreshToken"],
          map["scopes"].cast<String>(),
          idToken: map["idToken"] as String);
    } catch (e) {
      return null;
    }
  }


Client cli = Client();
    var c = await refreshCredentials(_clientID, getCredetial(), cli)
        .catchError((e) {
      print(e);
    });
    authenticatedClient(cli, c);

错误: 详细的ApiRequestError(状态:401,消息:请求缺少所需的身份验证凭据。预期的OAuth 2访问权

2 个答案:

答案 0 :(得分:1)

您可以使用例如 sharedPreferences 保存用户会话。每次用户启动应用程序时,您必须首先检查会话是否已保存,以便您可以跳过身份验证过程,否则您将启动身份验证

答案 1 :(得分:0)

我解决了。

保存访问凭证, 并使用 autoRefreshingClient;

   Client cli = Client();
    var c = await refreshCredentials(_clientID, getCredetial(), cli)
        .catchError((e) {
      print(e);
    });
    cli = autoRefreshingClient(_clientID, c, cli);