【问题标题】:share firestore collection paths across admin and web跨管理员和网络共享 Firestore 收集路径
【发布时间】:2021-08-28 00:13:26
【问题描述】:

我想制作可重用的函数,以跨网络和管理员 (node.js) 获取 Firestore 文档/集合引用。

例如:

getUserDocumentReference(company: string, user: string) {
  return firebase.collection("companies")
    .doc(company)
    .collection("users")
    .doc(user);
}

这将减少两种环境中的错误和坐标变化。

问题:管理员从firebase-admin 导入firestore,从firebase 导入网络。

我已经尝试在我的 firestore 引用中创建一些类/函数,但是我必须声明返回类型变得很痛苦:

const ref = (
    getUserDocumentReference("a", "1") as 
      firebase.firestore.DocumentReference
    )
    .withConverter(converter)

是否有一种更智能/更清洁的方法可以做到这一点,而无需重新发明轮子(即以某种方式传递数组或以复杂的方式重新创建路径)?


我目前的做法:

class FirestoreReferences {
   constructor(firestore: firebase.firestore.Firestore
  | admin.firestore.Firestore) {
      this.firestore = firestore;
  }

  getUserDocumentReference(company: string, user: string): FirebaseFirestore.DocumentReference | firebase.firestore.DocumentReference {
     return this.firestore.collection(...).doc(...);
  }
}

【问题讨论】:

    标签: javascript typescript firebase google-cloud-firestore


    【解决方案1】:

    刚刚发现 Typesaurus 提供泛型类型以在 web/admin 之间共享!

    【讨论】:

      【解决方案2】:

      最简单的答案:不要使用.doc().doc().ref。使用.doc.ref.path - 这是一个带有文档完整路径的字符串。将其保存/共享为 let refPath = whatever.doc().ref.path 并重新构建它,因为 .doc(refPath) 是任一环境。

      我实际上并不推荐这个 - 它暴露了你的内部结构 - 但它本身并不是不安全的(你的安全规则最好能解决这个问题)。

      顺便说一句,我正在为此特定目的构建一个完整的包装 npm 包 (@leaddreamer/firebase-wrapper)。

      【讨论】:

        【解决方案3】:

        你不应该这样做。 Admin SDK 用于服务器端使用,因为它可以完全控制您的整个项目。如果用户可以访问它,他们就可以控制您的应用程序。将firebasefirebase-admin 分开。

        【讨论】:

        • 如果在浏览器中使用管理员,他们将无权访问,因为它没有服务帐户。
        • 如果他们无权访问服务帐户,那么在浏览器中使用 Admin SDK 的目的是什么?
        • 如问题中所述,这是为了使单个 shared 函数在两种环境中都可以使用。
        • 你会如何分享这个功能?
        • 如果您在客户端中有 AdminSDK,并且它能够访问数据,那么您在浏览器中就有可能被盗的凭据。句号。
        猜你喜欢
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-26
        • 1970-01-01
        • 2011-11-20
        • 1970-01-01
        • 2019-01-19
        相关资源
        最近更新 更多