[Lv1] 過往專案的登入機制是怎麼實作的?
目標:用 3 ~ 5 分鐘清楚交代「前端如何處理登入、狀態維護與保護頁面」,方便面試時快速回想。
1. 面試回答主軸
- 登入流程三階段:送出表單 → 後端驗證 → 儲存 Token 與導頁。
- 狀態與 Token 管理:Pinia 搭配持久化,Axios Interceptor 自動附加 Bearer Token。
- 後續處理與保護:初始化共用資料、路由守衛、登出與例外情境(OTP、強制換密碼)。
先以這三個重點破題,再依需求展開細節,讓面試官感受到你具備整體視角。
2. 系統組成與責任分工
| 模組 | 位置 | 角色 |
|---|---|---|
authStore | src/stores/authStore.ts | 儲存登入狀態、持久化 Token、提供 getter |
useAuth Hook | src/common/hooks/useAuth.ts | 封裝登入 / 登出流程、統一回傳格式 |
| 登入 API | src/api/login.ts | 呼叫後端 POST /login、POST /logout |
| Axios 工具 | src/common/utils/request.ts | Request / Response Interceptor、統一錯誤處理 |
| 路由守衛 | src/router/index.ts | 依 meta 判斷是否需要登入、導向登入頁 |
| 初始化流程 | src/common/composables/useInit.ts | App 啟動時判斷是否已有 Token、載入必要資料 |
記憶法:「Store 管狀態、Hook 管流程、Interceptor 管通道、Guard 管頁面」。
3. 登入流程(一步步拆解)
Step 0. 表單與前置驗證
- 支援一般密碼與 SMS 驗證碼兩種登入方式。
- 送出前先做基本驗證(必填、格式、防重送)。
Step 1. 呼叫登入 API
const { status, data, code } = await useApi(login, payload);
useApi統一錯誤處理與 loading 管理。- 成功時
data會帶回 Token 與使用者核心資訊。
Step 2. 處理後端回應
| 情況 | 行為 |
|---|---|
| 需要補驗證(例如首次登入要身分確認) | 將 authStore.onBoarding 設為 true,導向驗證頁 |
| 強制修改密碼 | 依回傳旗標導向變更密碼流程並帶入必要參數 |
| 一般成功 | 呼叫 authStore.$patch() 儲存 Token 與使用者資訊 |
Step 3. 登入完成後的共用動作
- 取得使用者基本資料與錢包清單。
- 初始化個人化內容(例如禮物列表、通知)。
- 依
redirect或既定路由導向內頁。
登入成功只是一半,後續共用資料要在這個時機補齊,避免每個頁面再各自打一次 API。