用户注册时如何在 Cloud Functions for Firebase 中获取访问令牌?

How to obtain access token in Cloud Functions for Firebase when user signs up?

当客户使用 Github 登录时,我想触发一个云函数,从 Github 检索用户的个人资料数据并将其存储在实时数据库的 /users/{uid}/profile 中.

当新用户注册时,我可以触发我的云功能:

exports.fetchProfile = functions.auth.user().onCreate(event => {
  // user = event.data
  // uid = user.uid
  // access_token = ???

  // todo: request user profile from Github using access_token
  // todo: save profile in /users/{uid}/profile
});

但是,我如何获得用户 access_token 来提出 Github 个人资料请求?谢谢。

我试过的:

  1. 在客户端,使用 FirebaseAuth 获取 Github access_token.
  2. 使用 (1) 中的 access_token 创建 Firebase credential
  3. 使用(2)中的credential登录,我得到一个FIRUser成功回调,从中我可以获得uid
  4. 我将 {uid: access_token} 写入实时数据库中的队列,这反过来会触发我的云功能,该功能会执行配置文件检索。

这一切只是为了得到用户的access_token,我可以做得更好吗?

您不能使用用户创建触发器来执行此操作。 您有多种选择:

  1. 注册后,从客户端获取access token,保存在实时数据库中指定用户可访问的位置。然后,您可以为该位置设置云函数数据库触发器。当它被触发时,您将获得访问令牌并使 API 调用 GitHub 并获取数据并用它做任何您想做的事情。

  2. 运行 一切都在客户端。由于您在客户端(浏览器)中注册后拥有访问令牌,请对 GitHub 进行 API 调用,然后将配置文件数据保存在只能由用户访问的数据库位置。如果您需要 运行 额外的管理操作,您可以添加一个云函数来触发对该位置的更改。

顺便说一句,Firebase Auth (4.0.0) 现在 returns 额外的用户数据。检查:https://firebase.google.com/docs/reference/js/firebase.auth#.UserCredential 您可以通过调用 result.additionalUserInfo.profile 或 GitHub 用户名获取额外数据:result.additionalUserInfo.username.