在Firebase Cloud函数中访问用户的Google日历

问题描述 投票:0回答:1

负责向现有的Flutter应用添加云功能。云功能的目标是经常运行,并查看用户帐户的Google日历中是否有即将发生的事件。

用户创建帐户并使用Google登录插件登录,然后存储在Firebase中。

我已将所需的范围添加到GoogleSignIn对象

static GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: [
    'email',
    'https://www.googleapis.com/auth/calendar.events.readonly',
  ],
);

登录过程

final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth =
    await googleUser.authentication;

final AuthCredential credential = GoogleAuthProvider.getCredential(
  accessToken: googleAuth.accessToken,
  idToken: googleAuth.idToken,
);
final FirebaseUser user = await _auth.signInWithCredential(credential);
//update user table in firebase

此时,Google登录过程会返回一个访问令牌,我已将其存储在firebase中,供以后在云功能中使用。

我具有Google Developer Console中的Web应用程序/云功能api项目中的客户端ID和客户端密钥。

现在,我不确定如何使用googleapis /日历节点项目来使用此访问令牌进入该用户日历。

所有示例似乎都希望我再次使用范围创建另一个oauth2客户端以检索令牌,但是显然,用户不会这样做,因为当用户不使用应用程序时,所有操作都会在后台发生。

我需要创建一个服务帐户,然后该帐户可以代表用户访问这些日历吗?可以做到吗?我正在努力尝试通过Google文档找到答案。

firebase google-api google-cloud-functions google-calendar-api google-signin
1个回答
0
投票

我认为(但让我们看看专家怎么说),因为云功能正在人类用户的名义上(!)运行,并且由于它是异步运行,因此服务帐户是正确的方法。

为此,Cloud Functions作为服务帐户运行,因此,他们对其他Google服务(包括日历)的任何调用都将作为该服务帐户。

您不妨考虑委托授权link

[在您执行此操作之前,我鼓励您等待观察专家的意见。但是,当您等待时,可能值得查看链接;-)

© www.soinside.com 2019 - 2024. All rights reserved.