firebase - Firestore - 云功能 - 获取 uid

标签 firebase firebase-authentication google-cloud-functions google-cloud-firestore

我正在尝试在云功能中获取通过 firebase web sdk 身份验证的用户的 UID。云功能由onWrite触发Cloud Firestore 事件。

当登录用户正在创建/更新咖啡馆的项目时,会触发此功能。身份验证由 Firebase Auth 处理.安全规则只允许登录用户写入。因此,此事件可能与用户相关联。

export const cfun = functions.firestore.document('cafes/{cafeId}/items/{itemId}').onWrite(async event => {
  // trying to get the uid here
})

文档中有处理 userId 的示例,但在所有这些情况下,userId 都是文档路径的一部分。但在这个模型中,用户不是路径的一部分,因为咖啡馆可能有多个所有者,因此可能被许多用户操纵。因此,将 userId 添加到路径不是一种选择。

它看起来像是无服务器架构的常见案例。

#

更新:firestore 触发的函数没有 event.auth人口稠密。寻找有关建模以下要求的建议。

在数据模型中,我有咖啡馆和业主。每个咖啡馆可以由许多所有者拥有,并且可以在稍后阶段将咖啡馆转让给其他所有者。所以咖啡馆被建模为/cafes/{cafeId}以及属于咖啡馆的所有内容/cafes/{cafeId}/items/{itemId}等等
我们还需要根据不同的参数来查询咖啡馆,如果在用户下面建模就变得困难了。由于这些原因,咖啡馆不能被建模为 /users/{userId}/cafes/{cafeId} .

就安全规则而言,我可以使用 get(<>) 来控制写访问。以确定谁获得对咖啡馆的写入权限。安全性没有问题。

我觉得执行上下文应该提供所有可用的信息,并让开发人员根据他们的用例来处理它。对于无服务器应用程序,userId 是必须的。

如果 event.auth函数中未提供,则此限制将强制对不属于用户的项目进行建模/users/{userId}/<item_name>/{itemId}只是为了访问云函数中的 userId。这感觉不自然。

现在也无法确定是否由于控制台中执行的更改而触发了云功能。 event.auth可用于 firebase 数据库触发功能的信息将非常适合处理所有情况。

任何有关如何改造此案例的建议也值得赞赏。

#

提前致谢,

最佳答案

从 Cloud Functions 1.0 开始,您可以像这样获取 UID

exports.dbCreate = functions.database.ref('/path').onCreate((snap, context) => {
  const uid = context.auth.uid;
  const authVar = context.auth; 
});

以下是 FB 团队关于所有 CF1.0 更改的好帖子:https://firebase.google.com/docs/functions/beta-v1-diff#event_parameter_split_into_data_and_context
context.auth的数据可以在这里找到:https://firebase.google.com/docs/firestore/reference/security/#properties

关于firebase - Firestore - 云功能 - 获取 uid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47129512/

相关文章:

google-cloud-platform - 云函数可以从云存储中读取吗?

ios - 何时将用户注册数据保存到 Cloud Firestore

javascript - Firebase 身份验证失败

FireBase 身份验证的优势

node.js - 在 Firebase Cloud Functions 中仅部署单个非导出函数

java - 尝试在回收 View 中显示用户信息 - Firebase

javascript - 使用 firebase 版本 3.0.2 推送数据。 ..错误是( promise )错误: PERMISSION_DENIED: Permission denied(…)

javascript - 无法在 Firebase 实时数据库中实现分页

android - Firebase 数据更新滞后 - 多人游戏

http - Callable Cloud Functions 是否优于 HTTP 函数?