You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Stripe支付Firebase扩展时Product metadata未同步到auth用户实例怎么办

解决方案

要将Stripe Product里配置的userRole同步到auth.currentUser的IdToken声明中,核心是把Firestore中存储的订阅元数据写入Firebase Auth的自定义声明,可按以下步骤操作:

方法一:自定义云函数同步(适配你自定义的userRole元数据)

  • 编写Firestore云函数触发器,监听订阅文档的新增、更新、删除事件,自动同步角色到Auth声明
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

// 监听对应用户下的订阅文档变动
exports.syncRoleToAuthClaims = functions.firestore
  .document('users/{uid}/subscriptions/{subscriptionId}')
  .onWrite(async (change, context) => {
    const userUid = context.params.uid;
    const latestSub = change.after.exists ? change.after.data() : null;

    // 订阅已删除时清空角色声明
    if (!latestSub) {
      await admin.auth().setCustomUserClaims(userUid, { userRole: null });
      return;
    }

    // 读取订阅元数据中的userRole字段写入自定义声明
    const targetRole = latestSub.metadata?.userRole;
    if (targetRole) {
      await admin.auth().setCustomUserClaims(userUid, { userRole: targetRole });
    }
  });
  • 在Firebase CLI中执行命令部署云函数:firebase deploy --only functions
  • 你当前前端的isUserPremium函数无需额外修改,调用getIdToken(true)会强制刷新本地Token,拉取最新的声明字段。

方法二:复用Stripe扩展内置的角色同步能力

你也可以不用自行开发云函数,直接用扩展自带的角色同步逻辑:

  • 在Stripe对应产品的价格(Price)配置中添加元数据stripeRole: premium
  • 扩展会自动将该字段同步到用户Auth的自定义声明中,直接启用你代码中注释的判断逻辑即可:
return decodedToken?.claims?.stripeRole ? true : false;

内容的提问来源于stack exchange,提问作者Ryland King

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:54:06