跳至主要內容
Study Jam:雲端基礎實作 — 第 8/10 篇

Firebase 無伺服器應用開發

內文字級

Firebase 無伺服器應用開發
更新:2026-10-12

課程概述

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

Firebase 無伺服器應用架構:Web 與行動客戶端經 Hosting 和 Authentication 取得身分,Security Rules 在資料路徑檢查權限,再存取 Firestore、Storage 與 Functions;即時資料變更回推客戶端,本地 Emulator 隔離測試整套服務

App 可以直接透過 Client SDK 存取 Firestore,但每次請求都要由 Security Rules 檢查。資料變動後,畫面可以即時更新,也可以觸發 Functions 處理後端工作。 開發時先用 Emulator 測試,避免直接改到正式環境的資料。

你將學到

  • 設定 Firebase 專案並連結 GCP
  • 使用 Cloud Firestore 進行 CRUD 操作
  • 實作 Firebase Authentication 使用者認證
  • 部署 Cloud Functions for Firebase
  • 使用 Firebase Security Rules 保護資料

核心概念

Firebase 核心服務

服務功能替代方案
Cloud FirestoreNoSQL 即時資料庫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 含 Fields 並可再有 Subcollection;Query 經 Index 找到文件後由 onSnapshot Listener 即時更新 UI

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 必須同時通過 Authentication 與 Security Rules;Admin SDK 則以服務帳戶 IAM 授權,會略過 Rules。後端程式不能把兩條安全邊界混為一談。
Firestore 兩條授權路徑:Client SDK 帶 Auth Token 經 Security Rules 判斷後才可存取,Admin SDK 則以 Service Account 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

延伸學習

Study Jam:雲端基礎實作 — 第 8 篇/共 10 篇 查看系列全覽 →

讀完後,留一個學習紀錄

試著用自己的話說出一個重點,以及你會如何運用。實作文章請先核對結果與清理資源,再標記為讀完。

文章進度以你確認讀完的標記為準,可隨時取消。舊版造訪紀錄保留,但不計入讀完;這份自評不代表已掌握內容。

留言討論

文章目錄與系列

徽章解鎖!