Flutter+Firestore环境下:客户端或云函数校验订阅状态?
处理Flutter订阅状态验证的正确方式
绝对不能直接把客户端获取的customerInfo.entitlements.all[entitlementID]?.isActive传递给云函数——客户端代码完全可以被篡改,用户很容易通过逆向工程、调试工具甚至简单的参数修改,把false改成true来绕过验证,获取付费权限。
正确的做法是把订阅状态的验证逻辑放在云函数中,依赖RevenueCat的服务器端API来获取真实的订阅状态,步骤如下:
- 客户端只需要传递用户的RevenueCat App User ID给云函数,不要传递任何状态值。
- 在云函数中,使用RevenueCat的服务器端API密钥(注意是服务器专用密钥,别用客户端的API密钥),调用RevenueCat的接口获取该用户的完整订阅信息。
- 在云函数内部检查
entitlements.all[entitlementID]?.isActive,再执行对应的业务逻辑。
额外提醒:
- 不要在客户端存储或传递任何可以直接代表订阅状态的标记,所有权限判断必须以服务器端验证结果为准。
- 如果用Firestore存储订阅相关数据,要通过安全规则限制只有云函数能写入,客户端仅能读取,避免用户篡改本地数据。
内容的提问来源于stack exchange,提问作者matti peterbull
相关产品推荐
相关产品推荐

