当前位置: 首页 > 知识库问答 >
问题:

Firestore-云函数-获取uid

令狐跃
2023-03-14

我试图在云函数中获得通过firebase web sdk验证的用户的UID。cloud函数由cloud FireStore的onwrite事件触发。

当登录用户正在创建/更新CAFE中的项目时,会触发此功能。身份验证由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}等。我们还需要根据不同的参数查询咖啡馆,如果在用户下面建模,就会变得很困难。由于这些原因,不能将cafe建模为/users/{userId}/cafes/{cafeId}

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

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

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

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

任何关于如何重新模型这个案例的建议也是赞赏的。

先谢谢你,

共有1个答案

司毅庵
2023-03-14

由于Cloud Functions1.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

 类似资料:
  • 我的目标是用子集合test2下的[0]th+[1]th+[2]the document的值更新数据更新的test1ID文档。 但是使用下面的代码,我得到了未定义的test2文档列表(currentTest2DocumentList)。 (错误消息=>TypeError:无法读取未定义的属性“0”) 我怎样才能获得有效的子托收文件列表?

  • 当用户购买产品并按条支付时,我在自动化工作流程的集成方面有点困难。我正在使用火力还原和云功能。 工作流程 > 用户通过条纹Checkout.js购买产品 付款存储在付款集合中 触发云功能(付款收款的onWrite) TODO:将文档添加到集合“用户”文档中的“采购”集合 费用支付 除了第4步和第5步之外,我已经实现了这个工作流,因为我不知道如何在云函数中从Firestore检索和添加DocRef(

  • 云功能文档说 //使用Firebase管理SDK访问Firebase实时数据库。const admin=require('firebase-admin');管理初始化EAPP(); 我使用的是Cloud Firesta,而不是实时数据库。我如何访问它?

  • 我有一个困扰我好几天的问题。我正在尝试创建一个从Firestore数据库读取的Firebase云函数。 我的Firestore DB如下所示: 问题是我无法像这样列出: 如果我尝试这样做,我会得到空响应,就像我的集合中没有用户一样。 但我尝试直接访问用户它可以工作: 我的完整代码: 有人知道我做错了什么吗?非常感谢。

  • 我正在编写云函数,Firez是这样自动导入的。 但在部署时,错误如下所示。我试着这样做,它部署没有任何错误,但我不确定这是正确的方式与否。 有人知道吗? node_modules/@googlecloud/firestore/types/firestore。d、 ts:28:15-错误TS2300:重复标识符“DocumentData”。 28导出类型DocumentData={[field: s

  • 我在以前的项目中使用过这个Firebase数据库代码: 我现在正在尝试将其转换为FireStore。我基本上是试图让我的用户FCM的当一个通知正在发送。我尝试过很多事情,但还没有看到完成这件事的新方法。 编辑:这是我的代码。 });