添加Firestore安全规则后,如何在Unity中保留单元测试?
在保留Firestore安全规则的前提下进行Unity游戏测试的可行方案
1. 用真实测试账号完成认证
- 在Firebase控制台创建专属的测试Auth账号(比如
test_game_user@yourdomain.com),把账号密码存在测试配置文件里(记得不要提交到代码仓库)。 - Unity测试代码里,初始化Firebase后先调用
SignInWithEmailAndPasswordAsync完成真实登录,之后再执行所有Firestore操作。 - 建议单独建一个测试用Firebase项目,和生产项目完全隔离,测试数据不会污染生产环境,安全规则可以和生产保持一致,也能根据测试需求灵活调整。
2. 基于Firebase本地模拟器做离线测试
- 启用Firebase Emulator Suite,本地运行Auth、Firestore模拟器,Unity测试直接连接本地服务,不用碰线上数据库。
- Unity代码里配置Firebase指向模拟器地址:
var firestore = FirebaseFirestore.DefaultInstance; firestore.Settings.Host = "localhost:8080"; firestore.Settings.SslEnabled = false; - 模拟器支持模拟认证流程:可以通过Auth模拟器的API创建测试用户,或者在Unity测试代码里调用Auth的本地接口完成登录,既能触发安全规则校验,又完全离线,测试速度快还不产生线上费用。
3. 给安全规则加测试专属放行条件(需谨慎)
- 在安全规则中添加判断逻辑,允许带特定标识的请求通过,比如检查用户自定义Claims里的
is_test字段:rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.auth != null && (request.auth.token.is_test == true || !request.auth.token.is_test); // 更严谨的写法:仅允许特定测试账号或测试环境的请求 } } } - Unity测试用专门的账号登录后,通过Cloud Functions或Admin SDK给该账号添加
is_test: true的自定义Claims,就能在触发安全规则核心逻辑的同时完成测试。 - 注意:生产环境必须禁用这个规则,或者通过环境变量严格控制开关,避免安全漏洞。
4. 用Admin SDK生成临时测试Token
- 写一个简单的测试辅助接口(可以是Cloud Functions或者本地Node脚本),利用Firebase Admin SDK生成带自定义权限的临时Token。
- Unity测试代码调用这个接口获取Token,再用
SignInWithCustomTokenAsync完成认证,就能模拟不同权限的用户,同时触发安全规则校验:var customToken = await GetTestTokenFromHelper(); var signInResult = await FirebaseAuth.DefaultInstance.SignInWithCustomTokenAsync(customToken); // 后续执行Firestore测试操作
内容的提问来源于stack exchange,提问作者camazing
相关产品推荐
相关产品推荐

