多Firebase应用连接单个Firestore的电商项目架构搭建咨询
嘿,这个双应用的架构思路挺靠谱的!我来一步步给你拆解怎么搭建这套基于Firebase、React+Next.js的电商系统:
第一步:初始化共享的Firebase核心项目
首先得有一个统一的Firebase项目,作为两个应用的后端支撑:
- 去Firebase控制台新建一个项目,启用Cloud Firestore(初期可以选测试模式,后续一定要改成严格的安全规则),按需启用Firebase Authentication(给管理员做身份验证)和Cloud Storage(存商品图片)。
- 提取共享配置:在Firebase控制台的「项目设置」里,找到Web应用的配置代码(就是包含
apiKey、authDomain的那个对象),把它存成一个独立的firebase.config.js文件——后面两个应用都会用这个配置,确保它们连接的是同一个Firebase项目。
第二步:搭建管理员后台(Admin App)
用Next.js快速搭建管理端:
- 初始化项目:执行
npx create-next-app@latest admin-app,选你习惯的React/TypeScript配置就行。 - 集成Firebase:把刚才的
firebase.config.js复制到项目里,安装Firebase SDK:npm install firebase,然后初始化Firebase实例。 - 实现核心管理功能:
- 管理员身份校验:用Firebase Auth的邮箱密码或Google登录,给授权用户开权限——可以在Firestore里建个
admins集合存管理员的UID,或者用Firebase的自定义用户声明来标记管理员。 - 商品CRUD:用Firestore的API写创建、编辑、删除商品的逻辑,比如
addDoc(collection(db, 'products'), productData)就能新增商品。 - 商品图片上传:用Cloud Storage上传图片,上传成功后把图片URL存在对应的商品文档里。
- 管理员身份校验:用Firebase Auth的邮箱密码或Google登录,给授权用户开权限——可以在Firestore里建个
- 路由保护:在Next.js里用Middleware或者
getServerSideProps做权限校验,非管理员用户直接跳转到登录页,不让访问管理页面。
第三步:搭建前端店铺应用(Store App)
同样用Next.js搭建用户端:
- 初始化项目:
npx create-next-app@latest store-app,配置和Admin App保持一致就行。 - 集成Firebase:复制同一个
firebase.config.js,安装Firebase SDK。 - 实现店铺核心功能:
- 商品展示:从Firestore的
products集合拉取数据,用Next.js的静态生成(SSG)或者服务器组件(Server Components)来预渲染页面,提升加载速度。 - 购物车与订单:购物车可以用Firestore的用户专属集合(比如
users/{uid}/cart)或者本地存储;用户下单后把订单数据存到orders集合,Admin App就能实时看到并处理。
- 商品展示:从Firestore的
- 关键的安全规则配置:这一步一定要做,防止普通用户篡改数据!比如Firestore规则可以这么写:
service cloud.firestore { match /databases/{database}/documents { // 普通用户只读商品,管理员才能修改商品 match /products/{product} { allow read: if true; allow write: if request.auth != null && exists(/databases/$(database)/documents/admins/$(request.auth.uid)); } // 用户只能看自己的订单,管理员能看所有订单 match /orders/{order} { allow read, write: if request.auth != null && request.auth.uid == resource.data.userId; allow read: if request.auth != null && exists(/databases/$(database)/documents/admins/$(request.auth.uid)); } // 管理员只能修改自己的管理员记录 match /admins/{admin} { allow read, write: if request.auth != null && request.auth.uid == admin; } } }
第四步:部署两个应用到不同域名
最后把两个应用分别部署到各自的域名:
- 部署Admin App:用Vercel(Next.js官方部署平台)最方便,部署时把Firebase的配置用环境变量(比如
NEXT_PUBLIC_FIREBASE_API_KEY)配置到Vercel里,不要硬编码。然后绑定你的管理员域名,比如admin.yourshop.com。 - 部署Store App:同样用Vercel或其他平台,绑定店铺域名,比如
yourshop.com。 - 别忘了在Firebase控制台的「Authentication」->「设置」->「授权域名」里,把两个应用的域名都加进去,不然用户登录会报错。
额外小贴士
- 环境变量:Firebase的公开配置(
apiKey、authDomain这些)本身就是公开的,用NEXT_PUBLIC_前缀的环境变量就行,Next.js会自动把这些变量暴露给客户端。 - 性能优化:店铺应用用Next.js的ISR(增量静态再生)来缓存商品数据,减少Firestore的读取次数,用户体验更好。
- 测试:先在本地测试两个应用是否能同步Firestore数据,管理员操作是否能实时同步到店铺,安全规则是否生效。
内容的提问来源于stack exchange,提问作者Martin Reiche
相关产品推荐
相关产品推荐

