name: firebase-development-validate description: 当需要根据安全模型和最佳实践审查Firebase代码时,应使用此技能。触发词包括“review firebase”、“check firebase”、“validate”、“audit firebase”、“security review”、“look at firebase code”。验证配置、规则、架构和安全性。
Firebase代码验证
概述
此子技能根据已验证的模式和安全最佳实践验证现有的Firebase代码。它检查配置、规则、架构一致性、身份验证、测试和生产就绪性。
关键原则:
- 根据选定的架构模式进行验证
- 彻底检查安全规则
- 验证测试覆盖率是否存在
- 审查生产就绪性
此子技能适用场景
- 对Firebase项目进行代码审查时
- 审计安全实施时
- 准备生产部署时
- 用户说:“review firebase”、“validate”、“audit firebase”、“check firebase code”
不适用于:
- 初始设置 →
firebase-development:project-setup - 添加功能 →
firebase-development:add-feature - 调试活动错误 →
firebase-development:debug
TodoWrite工作流程
创建包含以下9个步骤的清单:
步骤1:检查firebase.json结构
验证必需部分:
hosting- 存在数组或对象functions- 源目录、运行时、预部署钩子firestore- 规则和索引文件emulators- 本地开发配置
检查托管模式是否与实现匹配(site:、target: 或 single)。
参考: docs/examples/multi-hosting-setup.md
步骤2:验证模拟器配置
关键设置:
{
"emulators": {
"singleProjectMode": true,
"ui": { "enabled": true }
}
}
验证所有正在使用的服务都有模拟器条目。
参考: docs/examples/emulator-workflow.md
步骤3:审查Firestore规则
检查:
- 顶部的辅助函数(
isAuthenticated()、isOwner()) - 一致的安全模型(仅服务器写入 或 客户端写入验证)
- 客户端写入使用
diff().affectedKeys().hasOnly([...]) - 如果使用
collectionGroup()查询,则检查集合组规则 - 底部的默认拒绝规则
参考: docs/examples/firestore-rules-patterns.md
步骤4:验证Functions架构
识别正在使用的模式:
- Express: 检查
middleware/、tools/、CORS、健康端点 - 领域分组: 检查导出、领域边界、
shared/ - 独立: 检查每个文件一个函数的结构
关键: 不要混合模式。验证整个项目的一致性。
参考: docs/examples/express-function-architecture.md
步骤5:检查身份验证实现
对于API密钥:
- 中间件使用项目前缀验证密钥格式
- 使用
collectionGroup('apiKeys')查询 - 检查
active: true标志 - 将
userId附加到请求
对于Firebase Auth:
- 函数检查
request.auth.uid - 角色查找使用Firestore用户文档
- 客户端在开发中连接到身份验证模拟器
参考: docs/examples/api-key-authentication.md
步骤6:验证ABOUTME注释
所有 .ts 文件应以以下内容开头:
// ABOUTME: 此文件功能的简要描述
// ABOUTME: 第二行提供额外上下文
grep -L "ABOUTME:" functions/src/**/*.ts # 查找缺失
步骤7:审查测试覆盖率
检查:
- 单元测试:
functions/src/__tests__/**/*.test.ts - 集成测试:
functions/src/__tests__/emulator/**/*.test.ts vitest.config.ts和vitest.emulator.config.ts存在- 满足覆盖率阈值(60%+)
npm test && npm run test:coverage
步骤8:验证错误处理
所有处理程序必须:
- 使用 try-catch 块
- 返回
{ success: boolean, message: string, data?: any } - 使用适当的HTTP状态码(400、401、403、500)
- 使用
console.error记录错误 - 在处理前验证输入
步骤9:安全和生产审查
安全检查:
- 代码中没有密钥(
grep -r "apiKey.*=" functions/src/) .env文件在.gitignore中- 规则中没有
allow read, write: if true; - 敏感字段受到保护,防止客户端写入
生产检查:
npm audit干净- 构建成功:
npm run build - 测试通过:
npm test .firebaserc中的项目正确- 为复杂查询定义了索引
验证清单
托管模式
- [ ] 模式与 firebase.json 配置匹配
- [ ] Firebase控制台中存在站点/目标
- [ ] 重写引用有效的函数
- [ ] 模拟器端口已配置
身份验证模式
- [ ] 身份验证方法与安全模型匹配
- [ ] 中间件/检查正确实施
- [ ] 环境变量已记录
- [ ] 模拟器连接已配置
安全模型
- [ ] 仅服务器写入:所有
allow write: if false; - [ ] 客户端写入:
diff().affectedKeys()验证 - [ ] 存在默认拒绝规则
- [ ] 一致使用辅助函数
常见问题
| 问题 | 修复方法 |
|---|---|
缺少 singleProjectMode |
添加到模拟器配置 |
| 无默认拒绝规则 | 添加 match /{document=**} { allow: if false; } |
| 混合架构 | 迁移到一致的模式 |
| 缺少 ABOUTME | 在所有 .ts 文件中添加2行标题 |
| 无集成测试 | 为工作流添加模拟器测试 |
| 响应格式不一致 | 标准化为 {success, message, data?} |
| 无错误处理 | 向所有处理程序添加 try-catch |
| 代码中的密钥 | 移动到环境变量 |
与超能力的集成
对于超出Firebase模式的通用代码质量审查,请调用 superpowers:requesting-code-review。
输出
验证后,提供:
- 发现摘要
- 按严重性分类的问题(关键、重要、锦上添花)
- 修复建议
- 最佳实践合规性确认
模式参考
- 托管:
docs/examples/multi-hosting-setup.md - 身份验证:
docs/examples/api-key-authentication.md - 函数:
docs/examples/express-function-architecture.md - 规则:
docs/examples/firestore-rules-patterns.md - 模拟器:
docs/examples/emulator-workflow.md