名称: firebase-development-validate 描述: 当需要根据安全模型和最佳实践审查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: 验证函数架构
识别正在使用的模式:
- Express模式: 检查
middleware/、tools/、CORS、健康端点 - 领域分组模式: 检查导出、领域边界、
shared/ - 独立函数模式: 检查每个文件一个函数的结构
关键: 不要混合模式。验证整个项目的一致性。
参考: docs/examples/express-function-architecture.md
步骤 5: 检查身份验证实现
对于API密钥:
- 中间件使用项目前缀验证密钥格式
- 使用
collectionGroup('apiKeys')查询 - 检查
active: true标志 - 将
userId附加到请求
对于Firebase身份验证:
- 函数检查
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 |
| 代码中包含密钥 | 移动到环境变量 |
与Superpowers集成
对于超出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