Firebase 的云功能 - 获取当前用户 ID [重复]

Posted

技术标签:

【中文标题】Firebase 的云功能 - 获取当前用户 ID [重复]【英文标题】:Cloud Functions for Firebase - Get current user id [duplicate] 【发布时间】:2018-01-18 16:57:10 【问题描述】:

花了一些时间寻找一个看似简单的问题的解决方案,但是...如何在云函数中获取当前用户的详细信息(不使用 functions.auth 触发器时)?我确信必须有一个简单的解决方案。 (希望)

感谢您的回复...刚刚完成了,但是如何在存储触发事件中从 Firebase 数据库获取 /user/uid?例如

exports.addUploadInfoToDatabase = functions.storage.object().onChange(event => 
  console.log("firebase storage has been changed");
  // need to find the uid in here somehow
  admin.database().ref(`/user/uid`).push(testKey:"testData");
)

如果我在您的回复中错过了要点,请提出来。

谢谢...

【问题讨论】:

嗨,欢迎来到 SO!请展示您已经尝试过的内容。您的问题目前可能不会得到很好的答案,并且可能会被关闭。请take the tour 并阅读how to ask 和how to create a minimal, verifiable example 以获得更好的使用本网站的结果。 尚不清楚标记为重复的问题的答案如何解决 OP 的问题。 对于那些真正在寻找这个被错误标记的问题的答案的人,请在此处查看我的答案:***.com/a/56761633/6276471 【参考方案1】:

首先你可以通过在用户上调用getIdToken()来获取当前登录的用户tokenId:https://firebase.google.com/docs/reference/js/firebase.User#getIdToken

firebase.auth().currentUser.getIdToken(true)
.then(function (token) 
    // You got the user token
)
.catch(function (err) 
    console.error(err);
);

然后将其发送到您的云功能。

然后在你的云函数中你可以使用:https://firebase.google.com/docs/auth/admin/verify-id-tokens

例子:

admin.auth().verifyIdToken(idToken)
  .then(function(decodedToken) 
    var uid = decodedToken.uid;
    // ...
  ).catch(function(error) 
    // Handle error
  );

decodedToken 的文档在这里:https://firebase.google.com/docs/reference/admin/node/admin.auth.DecodedIdToken#uid

DecodedIdToken 包含用户 uid,然后你可以通过调用这个来获取用户:https://firebase.google.com/docs/reference/admin/node/admin.auth.Auth#getUser

返回用户记录https://firebase.google.com/docs/reference/admin/node/admin.auth.UserRecord

【讨论】:

感谢您的回复...“首先您可以将当前登录的用户 tokenId 从客户端发送到您的云函数”...您的意思是向云函数传递一个值吗?我找不到任何文档来实现这一点... 如何访问firebase.auth().currentUser?我得到了firebase is not defined。如果您已经拥有currentUser,为什么不直接获取`.uid? @Francescu firebase.auth().currentUser 在客户端(浏览器)上完成,在初始化您的应用程序时:<script src="https://www.gstatic.com/firebasejs/4.8.0/firebase.js"></script> 此脚本自动创建您可以调用为 firebasewindow.firebase 对象从任何地方。 我看不出建议的答案如何解决问题。发布者正在响应由 Google Cloud Storage 触发的 Firebase 事件,因此没有“客户端”可以获取 id 令牌并将其传递给函数。我正在尝试解决类似的问题,但事件由 Firestore 触发。我需要访问执行导致事件触发的 Firestore 操作的用户。 其实做起来很简单。获取引起变更的用户的uidfunctions.database.ref('...').onWrite((change, context) => const uid = context.auth.uid; ); 然后获取使用admin.auth().getUser(uid)的用户。

以上是关于Firebase 的云功能 - 获取当前用户 ID [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从电子邮件 Firebase 获取用户 ID(不是当前用户)

如何在 Flutter 中从 Firebase 获取当前用户 ID

从 Cloud Functions for Firebase 获取当前用户 ID(PubSub 触发器)

Firebase 的云功能:“错误:无法处理请求”

如何在 Swift 的 Firebase Firestore 中获取当前文档 ID?

Firebase ios:按ID获取用户列表