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>
此脚本自动创建您可以调用为 firebase
的 window.firebase
对象从任何地方。
我看不出建议的答案如何解决问题。发布者正在响应由 Google Cloud Storage 触发的 Firebase 事件,因此没有“客户端”可以获取 id 令牌并将其传递给函数。我正在尝试解决类似的问题,但事件由 Firestore 触发。我需要访问执行导致事件触发的 Firestore 操作的用户。
其实做起来很简单。获取引起变更的用户的uid
:functions.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 触发器)