顯示身份狀態
畫面清楚標示 mock user 或未登入,不讓狀態只藏在變數裡。
CHAPTER 25 · 120 MINUTES
本章使用課次 25 後 120 分鐘,聚焦 mock 身份、owner uid 與 Rules 邊界;標準練習是概念模擬,不是真實登入。
LEARNING GOALS
畫面清楚標示 mock user 或未登入,不讓狀態只藏在變數裡。
輸入示範帳號後取得固定 mock uid,知道這不是真正認證。
只有 current uid 等於 owner uid 時才能編輯。
PROBLEM & ANALOGY
第 24 章已讓資料更新;本章回答「現在是誰、能改哪一筆」。authentication 是驗證門禁卡,authorization 是決定可開哪些門,uid 是不可用姓名取代的唯一識別。
本章要解決:同名、隱藏按鈕與前端條件都不能當伺服器安全邊界。
明確聲明:標準 solution 是教學模擬,不會連 Firebase Authentication,也不證明真實登入。
SCOPE
登入/登出狀態、固定 mock uid、owner uid 與 canEdit()。
Firebase Auth state 與 server Rules 才是正式身份和權限邊界。
OAuth provider、密碼保存、完整 Rules 部署與正式帳號生命週期。
CORE IDEAS
canEdit() 只是教學與 UI 層。DEBUGGING & SECURITY
課堂刻意錯誤:只隱藏按鈕仍可直接呼叫修改函式;或用 displayName 判斷,建立同名使用者後發生誤授權。
canEdit() 比對結果。先查:查 auth state 是否清成未登入,再查 UI 與 canEdit。
先查:用目前 uid 與 owner uid 比對,不用 displayName。
先查:直接呼叫修改流程;前端隱藏不是伺服器權限。
PRACTICE CONTRACT
檔案:script.js
位置:renderAuthState()
結果:畫面清楚顯示目前 mock user 或未登入
檔案:script.js
位置:mockSignIn()
結果:空白與錯誤 Email 不會登入,示範帳號取得固定 mock uid
檔案:script.js
位置:canEdit()
結果:只有資料 owner uid 可編輯
EVIDENCE
authentication 說明 ______;authorization 由 ______ 判斷;目前 uid ______ 與 owner uid ______ 的結果是 ______。
標準 solution 是概念模擬;不要把隱藏按鈕或 mock uid 描述成正式安全機制。
提交未登入、本人可編輯、他人不可編輯三張畫面;口頭分清 authentication、authorization、uid 與 owner uid。
下一章:把唯一 id、render 與 localStorage 合成完整 TODO CRUD。