如何编辑firebase云功能扩展的后端?

发布于 2025-01-11 11:56:14 字数 1653 浏览 0 评论 0原文

我正在编写一个类似于 patreon.com 的项目,我的目标是让多个成员创建自己的订阅计划并出售它。

我遇到了用于条纹付款的 Firebase 扩展 - https://firebase。 google.com/products/extensions/stripe-firestore-stripe- payments

此扩展程序的问题是,我只能创建 1 个高级会员资格,该会员资格将自定义声明添加到 auth 对象,并且我可以这样验证它:

export default async function isUserPremium(): Promise<boolean> {
  await auth.currentUser?.getIdToken(true);
  const decodedToken = await auth.currentUser?.getIdTokenResult();

  return decodedToken?.claims?.stripeRole ? true : false;
}

这意味着即使我有 100 个不同的订阅,我也只能附加单个布尔值,这是无用的。

我查看了源代码,发现了这个片段:

  // Update their custom claims
  if (role) {
    try {
      // Get existing claims for the user
      const { customClaims } = await admin.auth().getUser(uid);
      // Set new role in custom claims as long as the subs status allows
      if (['trialing', 'active'].includes(subscription.status)) {
        logs.userCustomClaimSet(uid, 'stripeRole', role);
        await admin
          .auth()
          .setCustomUserClaims(uid, { ...customClaims, stripeRole: role });
      } else {
        logs.userCustomClaimSet(uid, 'stripeRole', 'null');
        await admin
          .auth()
          .setCustomUserClaims(uid, { ...customClaims, stripeRole: null });
      }
    } catch (error) {
      // User has been deleted, simply return.
      return;
    }
  }

我不完全理解这段代码,但我认为这是分配布尔值的地方。

是否可以以某种方式编辑此源代码,以便我可以将订阅计划 ID 存储在 Array 中,而不是布尔值,以便在前端我可以验证并允许客户访问用户内容仅当他在该阵列中有有效计划时 ?

I am coding a project similar to patreon.com and my goal is to let multiple members create their own subscription plans and sell it.

I came across a firebase extension for stripe payments - https://firebase.google.com/products/extensions/stripe-firestore-stripe-payments

The problem with this extension is that I can only create a 1 premium membership that adds custom claims to the auth object and I can validate it like this:

export default async function isUserPremium(): Promise<boolean> {
  await auth.currentUser?.getIdToken(true);
  const decodedToken = await auth.currentUser?.getIdTokenResult();

  return decodedToken?.claims?.stripeRole ? true : false;
}

That means that even if I have 100 different subscriptions, I can only attach single boolean value, which is useless.

I went to the source code and I found this snippet:

  // Update their custom claims
  if (role) {
    try {
      // Get existing claims for the user
      const { customClaims } = await admin.auth().getUser(uid);
      // Set new role in custom claims as long as the subs status allows
      if (['trialing', 'active'].includes(subscription.status)) {
        logs.userCustomClaimSet(uid, 'stripeRole', role);
        await admin
          .auth()
          .setCustomUserClaims(uid, { ...customClaims, stripeRole: role });
      } else {
        logs.userCustomClaimSet(uid, 'stripeRole', 'null');
        await admin
          .auth()
          .setCustomUserClaims(uid, { ...customClaims, stripeRole: null });
      }
    } catch (error) {
      // User has been deleted, simply return.
      return;
    }
  }

I don't fully understand this code, but I think this is where the boolean value is assigned.

Would it be possible to somehow edit this source code, so that instead of boolean value, I could store subscription plan ids in Array , so that in the front end I could validate and allow customer to access users content only if he has active plan in that array
?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文