关于 firebase-auth-internal-app
firebase-auth-internal-app 是用于在内部应用中集成 Firebase Authentication 的实施指南,面向开发者。它涵盖域名限制、Custom Claims 权限同步及 Firestore 安全规则,并要求确认环境配置。
主要功能
- 01配置 Firebase Authentication 登录
- 02通过阻止函数限制邮箱域名
- 03将用户权限同步到 Custom Claims
- 04为 Firestore 配置安全规则
- 05确认域名、字段和角色设置
适用场景
- 01限制仅允许指定邮箱域名注册
- 02根据用户文档更新令牌权限
- 03为用户集合设置角色访问规则
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ tanabee/ skills --skill firebase-auth-internal-app安装后在 Claude Code 中输入/firebase-auth-internal-app确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/blocking_functions.mdcustom_claims.mdsecurity_rules.md详细介绍
将 Firebase Authentication 集成到内部应用中。实现以下组件。
前置条件
- 已创建 Firebase 项目
- 已安装 Firebase CLI 并登录
- 已启用 Firestore
- 已提供
firebase-auth-basics技能
实现
1. 身份验证设置
按照 firebase-auth-basics 技能执行以下操作:
- 使用 AskUserQuestion 询问用户要使用哪种身份验证方式
- 配置所选身份验证方式(通过
firebase.json配置,或在 Firebase Console 中手动设置) - 实现客户端身份验证(初始化、登录、身份验证状态监控、登出)
有关所有身份验证方式选项、配置步骤和客户端 SDK 实现示例,请参阅 firebase-auth-basics。
对于非 Web 平台(iOS / Android / Flutter / Unity 等),请从官方文档 https://firebase.google.com/docs/auth 获取相关平台信息。
2. 通过阻止函数限制域名
根据 references/blocking_functions.md 实现。
使用 beforeUserCreated 执行以下操作:
- 从用户的电子邮件地址中确定域名
- 如果域名在允许列表中,则将用户信息注册到 Firestore 的
users集合中 - 如果域名不在允许列表中,则返回错误以拒绝登录
- 通过返回值设置 Custom Claims 中的初始
role(return { customClaims: ... }),使其从首次登录开始就包含在 ID 令牌中
使用 AskUserQuestion 询问用户允许的电子邮件域名(例如 example.com)。如果有多个域名,请要求用户以逗号分隔输入。
同时确认以下内容:
- 要存储在
users集合中的字段(默认值:email、role、createdAt)
3. 通过 Custom Claims 管理权限
根据 references/custom_claims.md 实现。
使用 onDocumentWritten 监控 users/{id} 文档的变更,并将权限信息同步到 Custom Claims:
- 初始 Claims 由
beforeUserCreated的返回值设置(第 2 节);此触发器仅处理后续更新 - 当
users文档中的权限字段更新时,通过setCustomUserClaims将其反映到 ID 令牌中 - 在客户端,可使用令牌中的 Custom Claims 进行权限控制
默认 role 值:
admin:管理员user:普通用户pending:待审批deleted:已删除
通过域名限制的用户,其初始 role 为 user。请向用户确认以下内容:
- 要存储在 Custom Claims 中的权限字段名称(默认值:
role) - 是否自定义
role类型(默认值:admin、user、pending、deleted)
4. Firestore 安全规则
根据 references/security_rules.md 实现。
基于 role Custom Claim 定义辅助函数 isUser() 和 isAdmin(),并至少为 users 集合设置安全规则。
应用的其他集合也应使用 isUser() 和 isAdmin() 进行访问控制。
备注
- 如果未满足任何前置条件,请在继续前告知用户缺少哪些条件
- 设置前,务必与用户确认允许的域名、应用名称等环境相关值
- 阻止函数使用 Cloud Functions for Firebase(第 2 代)
- 写入
users集合时使用firebase-adminSDK(服务端)