Firebase 無伺服器應用開發
課程概述
做一個需要登入、讀寫資料的 App,不一定得先架好整套後端。Firebase 把使用者認證、Firestore 和函式等服務接在一起。這堂課會看資料怎麼流動,也會特別留意:前端能直接存取資料時,權限該在哪裡擋。

App 可以直接透過 Client SDK 存取 Firestore,但每次請求都要由 Security Rules 檢查。資料變動後,畫面可以即時更新,也可以觸發 Functions 處理後端工作。 開發時先用 Emulator 測試,避免直接改到正式環境的資料。
你將學到
- 設定 Firebase 專案並連結 GCP
- 使用 Cloud Firestore 進行 CRUD 操作
- 實作 Firebase Authentication 使用者認證
- 部署 Cloud Functions for Firebase
- 使用 Firebase Security Rules 保護資料
核心概念
Firebase 核心服務
| 服務 | 功能 | 替代方案 |
|---|---|---|
| Cloud Firestore | NoSQL 即時資料庫 | Firestore in Datastore mode |
| Firebase Auth | 身份認證 | Identity Platform |
| Cloud Functions | 後端邏輯 | Cloud Run |
| Firebase Hosting | 靜態網站託管 | Cloud Storage |
| Cloud Storage for Firebase | 檔案儲存 | Cloud Storage |
表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。
Firestore 資料模型
Firestore 使用 Collection → Document → Field 結構:
// 新增文件
db.collection('users').doc('user1').set({
name: '小明',
email: 'ming@example.com',
createdAt: firebase.firestore.FieldValue.serverTimestamp(),
});
// 即時監聽
db.collection('messages')
.orderBy('timestamp')
.onSnapshot((snapshot) => {
snapshot.docChanges().forEach((change) => {
console.log(change.doc.data());
});
});

Firestore 的資料以 Collection 和 Document 交替組成路徑。Document 裡有欄位,也能再建立
Subcollection;查詢會用到索引,onSnapshot 則讓畫面接收後續變更。
Security Rules
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read: if request.auth != null;
allow write: if request.auth.uid == userId;
}
}
}
流程圖暫時無法顯示。可先查看下方的流程與節點文字,或重新整理頁面後再試。
查看流程與節點文字
箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。
%%{init: {"flowchart": {"curve": "linear", "nodeSpacing": 24, "rankSpacing": 32}}}%%
flowchart TD
REQUEST["Firestore 寫入請求"] --> SDK{"使用哪一種 SDK?"}
SDK -->|"Client SDK"| AUTH{"Auth Token 有效?"}
AUTH -->|"否"| CLIENT_DENY["拒絕:沒有可驗證的使用者身分"]
AUTH -->|"是"| RULES{"路徑、uid 與欄位變更<br/>都符合 Security Rules?"}
RULES -->|"是"| CLIENT_ALLOW["允許 Client 寫入"]
RULES -->|"否"| RULE_DENY["拒絕:修正身分、路徑<br/>或資料驗證條件"]
SDK -->|"Admin SDK"| IAM{"Service Account 的<br/>IAM 權限允許?"}
IAM -->|"是"| ADMIN_ALLOW["直接授權寫入<br/>並稽核伺服器端操作"]
IAM -->|"否"| ADMIN_DENY["拒絕:修正最小必要 IAM 權限"] 
Client SDK 的每次存取都先比對路徑與 request.auth、resource、request.resource,只有 Allow 才能進入 Firestore。Admin SDK 不經 Security Rules,而是依 Service Account IAM;兩條路徑不可混為一談。
實作重點
- Firestore 的資料存取模式在建立資料庫時選定,資料庫有資料後就不能更改:Native mode(即時同步與離線快取)、Datastore mode(相容 Datastore API,官方只建議給依賴這組 API 的既有應用,沒有即時更新功能),以及 Enterprise edition 才有的 Firestore with MongoDB compatibility
- 建立 Firestore 資料庫時要選位置(每個資料庫各自設定),建立後無法更改
- 正式環境的 Security Rules 要依使用者身分和資料路徑限制讀寫
- Firebase Local Emulator Suite 可在本機模擬 Authentication、Firestore、Realtime Database、Cloud Storage for Firebase、Cloud Functions、Hosting 等核心服務;Analytics、Remote Config、Crashlytics 目前不支援
Skill Badge 指引
Lab 連結:Develop Serverless Apps with Firebase — 完成此 lab 可獲得 Skill Badge
延伸學習
- GenAI 結合:Agent Platform(原 Vertex AI)+ Flutter 打造 AI Agent
- 本系列下一課:部署應用到 Kubernetes
讀完後,留一個學習紀錄
試著用自己的話說出一個重點,以及你會如何運用。實作文章請先核對結果與清理資源,再標記為讀完。
文章進度以你確認讀完的標記為準,可隨時取消。舊版造訪紀錄保留,但不計入讀完;這份自評不代表已掌握內容。