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

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

当客户端使用 Github 登录时,我想触发一个 Cloud Function,从 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
});

但是,如何获取发出 Github 配置文件请求所需的用户

access_token
?谢谢。

我尝试过的:

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

这一切只是为了得到用户的

access_token
,我能做得更好吗?

swift firebase github firebase-authentication google-cloud-functions
2个回答
0
投票

您无法使用用户创建触发器来做到这一点。 您有多种选择:

  1. 注册后,从客户端获取访问令牌并将其保存在实时数据库中指定用户可访问的位置下。然后,您可以为该位置设置云函数数据库触发器。触发后,您将获取访问令牌并对 GitHub 进行 API 调用并获取数据并对其执行任何您想要的操作。

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

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


0
投票

我正在尝试做类似的事情,基本上我想使用访问令牌中的声明来验证用户是否应该有权访问特定租户。租户 ID 位于访问令牌中,但我不能信任 setTenantId 调用,因为恶意用户可能会任意调用它。 7年了,有人想出这个办法吗?

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