Firebase+Stripe:如何查询特定用户是否拥有付费订阅?
查询特定用户的
stripeRole实现方案 要查询特定用户的stripeRole,无法直接通过前端Firebase Auth SDK实现——前端SDK仅允许操作当前登录用户的令牌与声明。必须借助后端的Firebase Admin SDK完成,具体实现步骤如下:
1. 初始化Firebase Admin SDK(后端环境)
首先在后端项目中初始化Admin SDK,需使用服务账号密钥验证身份:
const admin = require('firebase-admin'); if (!admin.apps.length) { admin.initializeApp({ credential: admin.credential.cert(require('./path/to/serviceAccountKey.json')) // 若使用GCP环境,可改用applicationDefault() // credential: admin.credential.applicationDefault() }); }
2. 通过UID查询用户的stripeRole
直接调用Admin SDK的getUser方法获取用户记录,从中提取自定义声明:
async function getUserStripeRole(uid) { try { const userRecord = await admin.auth().getUser(uid); return !!userRecord.customClaims?.stripeRole; } catch (error) { console.error('获取用户信息失败:', error); return false; } }
3. 通过邮箱查询用户的stripeRole
若仅已知用户邮箱,可先通过getUserByEmail获取用户记录,再提取声明:
async function getUserStripeRoleByEmail(email) { try { const userRecord = await admin.auth().getUserByEmail(email); return !!userRecord.customClaims?.stripeRole; } catch (error) { console.error('通过邮箱获取用户失败:', error); return false; } }
关键说明
- 前端无法直接访问其他用户的自定义声明,这是Firebase的安全设计,避免用户越权获取或修改他人权限信息。
- 需将上述代码部署在后端服务(如Firebase Cloud Functions、Express服务器等),前端通过API请求调用该服务,间接获取目标用户的
stripeRole状态。
内容的提问来源于stack exchange,提问作者Maksym Davydov
相关产品推荐
相关产品推荐

