根據我們在第一週定版的系統設計與 API 規格,第二階段的核心目標是實現 FIDO/WebAuthn 的後端邏輯。為此,我們選定 Firebase Functions 作為後端技術棧。
Firebase Functions 是 Google Cloud Platform (GCP) 生態系中的 Functions-as-a-Service (FaaS) 解決方案。選擇它的主要技術優勢包括:
今天的任務是完成 Firebase 專案的建立、初始化本地開發環境,並成功部署一個基礎的 HTTP 觸發函式,以驗證整個開發與部署流程的通暢性。
在開始之前,請確保您的開發環境已具備以下工具:
18.x
或更高版本的 LTS (長期支援) 版本。接下來,我們需要安裝 Firebase Command Line Interface (CLI),
這是一個用於管理、部署 Firebase 專案的關鍵工具。
開啟終端機 Terminal,執行以下指令進行全域安裝:
npm install -g firebase-tools
安裝完成後,可以執行 firebase --version
來確認 CLI 是否安裝成功。
所有 Firebase 服務都需要依附於一個專案。請依照以下步驟建立:
fido-auth-ironman
。等待數分鐘後,您的專案即可準備就緒。請注意,每個 Firebase 專案在底層都對應一個 GCP 專案,具備完整的 GCP 服務存取權限。
專案建立後,我們需要在本地電腦上建立一個對應的工作目錄並將其與雲端專案連結。
建立並進入專案目錄:
mkdir fido-server-functions && \
cd fido-server-functions
登入 Firebase:
執行 firebase login
指令。這會開啟瀏覽器,引導您登入 Google 帳戶並授權 Firebase CLI。
初始化 Firebase 功能:
在專案目錄中,執行 firebase init
。CLI 會引導您完成一系列設定:
Which Firebase features do you want to set up?
Functions
和 Firestore
。(使用方向鍵移動,空白鍵選取)Please select an option:
Use an existing project
,然後從列表中選取您剛剛建立的專案。What language would you like to use to write Cloud Functions?
TypeScript
。我們選擇 TypeScript 是因為其強型別特性有助於在開發階段捕捉潛在錯誤,對於處理複雜的 FIDO 數據結構尤其重要。Do you want to use ESLint to catch probable bugs and enforce style?
Yes
。遵循程式碼規範是良好實踐。Do you want to install dependencies with npm now?
Yes
。CLI 會自動安裝所需的 Node.js 模組。完成後,您的專案目錄將生成以下結構:
fido-server-functions/
├── functions/ # 所有 Cloud Functions 程式碼存放於此
│ ├── src/
│ │ └── index.ts # Functions 的主要進入點
│ ├── package.json
│ └── tsconfig.json
├── firestore.rules # Firestore 安全規則文件
└── firebase.json # Firebase 專案設定檔
為了驗證我們的環境配置無誤,我們將編寫一個簡單的 "Hello World" 函式並將其部署到雲端。
編輯程式碼:
打開 functions/src/index.ts
檔案,並用以下內容覆蓋:
import * as functions from "firebase-functions/v2";
import * as logger from "firebase-functions/logger";
// 建立一個由 HTTP 請求觸發的 v2 函式
// region 'asia-east1' 指定函式部署在台灣的 GCP 資料中心
export const helloWorld = functions.https.onRequest(
{ region: "asia-east1" },
(request, response) => {
// 記錄日誌,方便在 GCP Console 中進行偵錯
logger.info("Hello World function was triggered!");
response.status(200).send("Hello from Firebase FIDO Server!");
}
);
我們使用的是 v2 版本的 Functions,其語法和配置更為現代化。同時指定部署區域有助於降低延遲。
部署函式:
回到終端機,在專案根目錄下執行部署指令:
firebase deploy --only functions
此指令會將 functions
目錄下的 TypeScript 程式碼編譯為 JavaScript,打包後上傳至 Cloud Functions 執行環境。
首次部署需要幾分鐘時間。成功後,終端機會顯示該函式的公開存取 URL,格式如下:Function URL (helloWorld(asia-east1)): https://helloworld-....asia-east1.run.app
驗證結果:
使用 curl
或直接在瀏覽器中訪問上述 URL,您應該會收到 "Hello from Firebase FIDO Server!"
的回應,這代表您的 Serverless 後端環境已成功啟動並運行。
今天,我們成功地建立並配置了一個功能齊全、基於雲端的 Serverless 後端開發環境。我們在沒有接觸任何虛擬主機、網路設定或作業系統配置的情況下,僅用幾行指令就部署了一個公開的 Web API 端點。
這個輕量且強大的基礎設施,將是我們未來幾天實作 FIDO 伺服器邏輯的基石。下一步,我們將根據 Day 06 的設計,開始在 Firestore 中規劃我們的資料庫結構,並定義嚴格的安全規則,為安全地儲存使用者憑證做好準備。