第 20 堂|登出與失效,都要真的離開案件

呼叫後端撤銷登入,驗證匿名拒絕,分清身份失效、空資料與連線失敗。

3 小時 · 六個步驟 · 54 分鐘觀念+126 分鐘實作

自己已勾選 0/6 步
步驟 1/6 · 觀念 18 分鐘

畫面離開不等於身份撤銷

登出呼叫真實後端並清私密畫面。

先準備

  • 自己的service-site/frontend/admin-login.html、admin-cases.html、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • 匿名/登入/登出矩陣與自己的實際id

session由後端管理,登出要呼叫契約端點,再清目前私密畫面,舊身份後續讀取也應被拒絕。

先分清自己的作品、線上畫面與可啟動參考包;線上參考不提供API,請在本機閱讀隨包OPEN_REFERENCE.html後操作。

一起拆解:登出是兩邊一起完成

本關18分鐘觀念:3分鐘看輸入、6分鐘逐步推演、5分鐘正常與錯誤對照、4分鐘先預測再說明。

這次的輸入

目前已登入且畫面顯示案件A,按登出。

POST /api/auth/logout → 撤銷session
前端 → 清列表、明細、暫存
下一次管理請求 → 401

這段是觀念縮圖,完整可操作檔案在本關參考成果;請依當前階段判讀,不把片段直接貼到任意位置。

一步一步推演

  1. 先確認me成功與畫面id,再操作登出。
  2. 請求後端撤銷身份,前端同步清私密內容,不只跳頁。
  3. 重新整理及返回工作台,匿名請求都應被拒絕,資料庫案件不刪。

正常應看到

身份失效且畫面不殘留A,重新登入後仍可讀原案。

常見錯誤對照

只location跳登入頁,舊session可能仍能讀管理API。

先預測,再說明原因

為何登出要清私密畫面,卻不能把cases.json刪掉?

跟著觀察

  1. 先讀「登出是兩邊一起完成」的輸入,指出本關實際檔案或資料。
  2. 為何登出要清私密畫面,卻不能把cases.json刪掉?
  3. 依例子逐步說明正常結果與錯誤差別,再記下自己的預測;參考結果不是已完成的實測。

做完,自己確認

  • 登出呼叫真實後端並清私密畫面。
  • 能指出指定檔案與作用範圍。
接著進行第 2 步
步驟 2/6 · 實作 42 分鐘

登出要通知真正的後端

登出呼叫真實後端並清私密畫面。

先準備

  • 自己的service-site/frontend/admin-login.html、admin-cases.html、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • 匿名/登入/登出矩陣與自己的實際id

手動寫登入前後與登出後兩個API預期。

跟著做

  1. 登入自己的教學管理員,核對同案。
  2. 請AI只加後端登出button與清私密內容。
  3. 登出後直接讀受保護列表/明細,再登入恢復。

加入真實登出與撤銷驗收

主要使用 Cursor 內建 AI;先附資料,再送出指令。

1.附上這些檔案與資料
  • 自己的service-site/frontend/admin-login.html、admin-cases.html、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • 匿名/登入/登出矩陣與自己的實際id
2.貼到哪裡
  1. 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
  2. 用 @ 附上本關指定檔案,核對完整路徑;補實際觀察、輸入與結果,再貼下方 Prompt。
  3. 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 AI 代替驗收或提交。
3.預期回覆與操作
  • 請AI只加後端登出button與清私密內容。
  • 舊身份讀受保護資料拒絕,重新登入可恢復。
4.自己檢查結果
  • 登出呼叫真實後端並清私密畫面。
  • 舊身份讀受保護資料拒絕,重新登入可恢復。
加入真實登出與撤銷驗收 Prompt(可收合)

你是協助零基礎學員的網站開發助手。我使用 Cursor 免費版編輯原生 HTML、CSS、JavaScript;必要時把你提供的內容手動貼入檔案。

情境與本次輸入:沿用提供的Node教學後端與HttpOnly session cookie,前端fetch credentials:include,不把認證存在localStorage。POST /api/auth/login、GET /api/auth/me、POST /api/auth/logout;受保護GET /api/admin/cases回cases摘要,GET /api/admin/cases/:id回case明細,PATCH同路徑只接受status及/或internalNote。未登入401、找不到404、欄位422、教學更新失敗503。案件使用實際穩定id,從第18堂同案延續,不以不同預置案假串接。 第19堂已在401時清私密DOM,本堂不刪除正常防護來製造任務;新增真實登出,再精修失效/斷線訊息、手動重新確認及BFCache返回的重新驗證。只對隔離教學環境與虛構案件操作。

本次任務:只在案件頁加登出button,POST /api/auth/logout credentials:include,成功後清列表/明細/選取與私密暫存,顯示已登出及登入入口。保留第19堂既有401清除,不靠前端旗標或跳轉冒充撤銷,不讀Cookie。用匿名、登入、登出後直接API拒絕的矩陣驗收;公開詢問、同案與原讀取保留,不改後端認證。

請先閱讀我附上的相關檔案或資料,資訊缺漏時精確列出需要補充的項目,不猜檔名、API 或測試結果。說明以繁體中文撰寫,指出檔案與修改位置;檢查結果區分已知、待驗與未完成。只處理學生自己的練習副本,不改現有展示網站,不要求付費訂閱。
Cursor AI 無法使用?改用 ChatGPT 備援

把上方指定的檔案內容、清單與補充資料,連同同一份 Prompt 貼入 ChatGPT 對話。只貼電腦上的路徑,無法讓它讀取你的檔案。

收到程式碼時,先核對檔名與修改位置,再手動存回自己的練習副本;若收到檢查表或補檔步驟,就逐項操作。不要把 Prompt 或程式碼框的反引號貼進 HTML/CSS。

兩邊都受限時,可先看既有參考成果、檢查差異與手動修改;未做過的 AI 生成或公開發布仍記待完成。不要貼入帳密、金鑰或真實個資。

複製只取得 Prompt 文字,檔案需自行在 Cursor 附上;本頁不會呼叫 AI 或自動完成關卡。

做完,自己確認

  • 登出呼叫真實後端並清私密畫面。
  • 舊身份讀受保護資料拒絕,重新登入可恢復。

線上只看前端畫面;完整操作請下載。本頁不提供案件API。把參考包解壓到新的資料夾,先讀 OPEN_REFERENCE.html,再啟動隨包後端;不要覆蓋自己的作品或案件。

下載本關可啟動參考包

看參考包啟動與資料保留步驟

接著進行第 3 步
步驟 3/6 · 觀念 18 分鐘

用回應狀態選對提示

401、空清單、斷線各有清楚文字。

先準備

  • 自己的service-site/frontend/admin-login.html、admin-cases.html、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • 200空、401及連線失敗的實際證據

200空清單、401身份失效與無法連線不是同一種情境。保守清私密畫面後,讓人知道應重新登入或檢查後端。

一起拆解:空資料與失效不能用同一句

本關18分鐘觀念:3分鐘看輸入、6分鐘逐步推演、5分鐘正常與錯誤對照、4分鐘先預測再說明。

這次的輸入

分別測GET列表200空、401失效、斷線無法讀取。

200 [] → 零筆;身份仍有效
401 → 清私密內容,重新登入
斷線 → 保守清畫面,確認連線後手動再試

這段是觀念縮圖,完整可操作檔案在本關參考成果;請依當前階段判讀,不把片段直接貼到任意位置。

一步一步推演

  1. 先為三種狀態寫不同預期,不靠畫面文字猜HTTP。
  2. 切cases=empty、expire及暫停後端,逐項記實際回應。
  3. 每項復原normal並重新登入,核對原同id資料仍存在。

正常應看到

使用者知道是沒資料、沒權限或連線問題。

常見錯誤對照

空列表顯示「帳密錯誤」會把資料狀態誤說成身份問題。

先預測,再說明原因

200空列表可否直接宣稱案件已被刪除?

跟著觀察

  1. 先讀「空資料與失效不能用同一句」的輸入,指出本關實際檔案或資料。
  2. 200空列表可否直接宣稱案件已被刪除?
  3. 依例子逐步說明正常結果與錯誤差別,再記下自己的預測;參考結果不是已完成的實測。

做完,自己確認

  • 401、空清單、斷線各有清楚文字。
  • 能指出指定檔案與作用範圍。
接著進行第 4 步
步驟 4/6 · 實作 42 分鐘

失效、空清單與斷線分開看

401、空清單、斷線各有清楚文字。

先準備

  • 自己的service-site/frontend/admin-login.html、admin-cases.html、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • 200空、401及連線失敗的實際證據

親手列三種回應與提示,不把預期當已測。

跟著做

  1. 依契約切空清單、令session失效與暫停後端,分別觀察。
  2. 請AI只精修錯誤訊息、手動重新確認與返回頁驗身份。
  3. 恢復normal與後端後重新確認登入,核對同案及公開詢問。

分開管理身份與連線狀態

主要使用 Cursor 內建 AI;先附資料,再送出指令。

1.附上這些檔案與資料
  • 自己的service-site/frontend/admin-login.html、admin-cases.html、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • 200空、401及連線失敗的實際證據
2.貼到哪裡
  1. 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
  2. 用 @ 附上本關指定檔案,核對完整路徑;補實際觀察、輸入與結果,再貼下方 Prompt。
  3. 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 AI 代替驗收或提交。
3.預期回覆與操作
  • 請AI只精修錯誤訊息、手動重新確認與返回頁驗身份。
  • 可手動重新確認,返回舊頁不直接信任快取私密資料。
4.自己檢查結果
  • 401、空清單、斷線各有清楚文字。
  • 可手動重新確認,返回舊頁不直接信任快取私密資料。
分開管理身份與連線狀態 Prompt(可收合)

你是協助零基礎學員的網站開發助手。我使用 Cursor 免費版編輯原生 HTML、CSS、JavaScript;必要時把你提供的內容手動貼入檔案。

情境與本次輸入:沿用提供的Node教學後端與HttpOnly session cookie,前端fetch credentials:include,不把認證存在localStorage。POST /api/auth/login、GET /api/auth/me、POST /api/auth/logout;受保護GET /api/admin/cases回cases摘要,GET /api/admin/cases/:id回case明細,PATCH同路徑只接受status及/或internalNote。未登入401、找不到404、欄位422、教學更新失敗503。案件使用實際穩定id,從第18堂同案延續,不以不同預置案假串接。 第19堂已在401時清私密DOM,本堂不刪除正常防護來製造任務;新增真實登出,再精修失效/斷線訊息、手動重新確認及BFCache返回的重新驗證。只對隔離教學環境與虛構案件操作。

本次任務:保留既有clearPrivate與後端授權,只精修admin.js:401明示登入已失效及重新登入入口;一般連線/讀取失敗顯示需確認後端,私密畫面先清除。加手動「重新確認登入與案件」button;BFCache pageshow返回時先清私密DOM再驗me。空列表保持200空狀態,不混為401,不無限自動重試。列三情境、恢復normal、重新登入與公開詢問回歸。

請先閱讀我附上的相關檔案或資料,資訊缺漏時精確列出需要補充的項目,不猜檔名、API 或測試結果。說明以繁體中文撰寫,指出檔案與修改位置;檢查結果區分已知、待驗與未完成。只處理學生自己的練習副本,不改現有展示網站,不要求付費訂閱。
Cursor AI 無法使用?改用 ChatGPT 備援

把上方指定的檔案內容、清單與補充資料,連同同一份 Prompt 貼入 ChatGPT 對話。只貼電腦上的路徑,無法讓它讀取你的檔案。

收到程式碼時,先核對檔名與修改位置,再手動存回自己的練習副本;若收到檢查表或補檔步驟,就逐項操作。不要把 Prompt 或程式碼框的反引號貼進 HTML/CSS。

兩邊都受限時,可先看既有參考成果、檢查差異與手動修改;未做過的 AI 生成或公開發布仍記待完成。不要貼入帳密、金鑰或真實個資。

複製只取得 Prompt 文字,檔案需自行在 Cursor 附上;本頁不會呼叫 AI 或自動完成關卡。

做完,自己確認

  • 401、空清單、斷線各有清楚文字。
  • 可手動重新確認,返回舊頁不直接信任快取私密資料。

線上只看前端畫面;完整操作請下載。本頁不提供案件API。把參考包解壓到新的資料夾,先讀 OPEN_REFERENCE.html,再啟動隨包後端;不要覆蓋自己的作品或案件。

下載本關可啟動參考包

看參考包啟動與資料保留步驟

接著進行第 5 步
步驟 5/6 · 觀念 18 分鐘

授權拒絕與前端清理都要完成

失效後列表與明細不殘留,身份由後端重新確認。

先準備

  • 自己的service-site/frontend/admin-login.html、admin-cases.html、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • fault-L20的identityError、401與舊明細證據

故障版拿掉失效處理的clearPrivate,401後舊案件仍在。這是殘留畫面,不是可以繼續操作的有效資料。

一起拆解:後端拒絕,畫面也要清

本關18分鐘觀念:3分鐘看輸入、6分鐘逐步推演、5分鐘正常與錯誤對照、4分鐘先預測再說明。

這次的輸入

教學expire後API已401,故障副本卻還有舊列表與明細。

401 → identityError → clearPrivate()
清DOM與記憶體暫存,不清後端資料

這段是觀念縮圖,完整可操作檔案在本關參考成果;請依當前階段判讀,不把片段直接貼到任意位置。

一步一步推演

  1. 先登入讀到A,再使身份失效並觸發管理讀取。
  2. 只恢復401處理的私密清理,不把401放行成200。
  3. 核對列表、明細與暫存清空,再登入讀同A。

正常應看到

失效不留下舊私密畫面,合法登入功能保留。

常見錯誤對照

用CSS暫時隱藏但保留私密DOM與暫存,沒有完成指定清理。

先預測,再說明原因

重驗應包含重新登入嗎?它能排除什麼過度修復?

跟著觀察

  1. 先讀「後端拒絕,畫面也要清」的輸入,指出本關實際檔案或資料。
  2. 重驗應包含重新登入嗎?它能排除什麼過度修復?
  3. 依例子逐步說明正常結果與錯誤差別,再記下自己的預測;參考結果不是已完成的實測。

做完,自己確認

  • 失效後列表與明細不殘留,身份由後端重新確認。
  • 能指出指定檔案與作用範圍。
接著進行第 6 步
步驟 6/6 · 實作 42 分鐘

後端拒絕了,舊畫面也要清掉

失效後列表與明細不殘留,身份由後端重新確認。

先準備

  • 自己的service-site/frontend/admin-login.html、admin-cases.html、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • fault-L20的identityError、401與舊明細證據

先登入看明細,再令session失效,記401與殘留DOM。

跟著做

  1. 獨立fault-L20登入後看同案,再令身份失效。
  2. 請AI只恢復identityError裡的clearPrivate。
  3. 重跑列表、明細、登入恢復、空與斷線,不改後端權限。

清除失效後的私密殘留

主要使用 Cursor 內建 AI;先附資料,再送出指令。

1.附上這些檔案與資料
  • 自己的service-site/frontend/admin-login.html、admin-cases.html、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • fault-L20的identityError、401與舊明細證據
2.貼到哪裡
  1. 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
  2. 用 @ 附上本關指定檔案,核對完整路徑;補實際觀察、輸入與結果,再貼下方 Prompt。
  3. 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 AI 代替驗收或提交。
3.預期回覆與操作
  • 請AI只恢復identityError裡的clearPrivate。
  • 直接API仍拒絕,原登入與公開詢問保留。
4.自己檢查結果
  • 失效後列表與明細不殘留,身份由後端重新確認。
  • 直接API仍拒絕,原登入與公開詢問保留。
清除失效後的私密殘留 Prompt(可收合)

你是協助零基礎學員的網站開發助手。我使用 Cursor 免費版編輯原生 HTML、CSS、JavaScript;必要時把你提供的內容手動貼入檔案。

情境與本次輸入:沿用提供的Node教學後端與HttpOnly session cookie,前端fetch credentials:include,不把認證存在localStorage。POST /api/auth/login、GET /api/auth/me、POST /api/auth/logout;受保護GET /api/admin/cases回cases摘要,GET /api/admin/cases/:id回case明細,PATCH同路徑只接受status及/或internalNote。未登入401、找不到404、欄位422、教學更新失敗503。案件使用實際穩定id,從第18堂同案延續,不以不同預置案假串接。 第19堂已在401時清私密DOM,本堂不刪除正常防護來製造任務;新增真實登出,再精修失效/斷線訊息、手動重新確認及BFCache返回的重新驗證。只對隔離教學環境與虛構案件操作。

本次任務:故障identityError少掉clearPrivate(),後端401但列表與明細仍留著。只恢復該呼叫,清allCases/selectedId、列表DOM、明細DOM與私密暫存,workspace隱藏,保留正確401提示及登入入口。不要只換文字或把舊內容視為成功,不放寬後端授權。列登入後失效、直接拒絕、DOM清除與重新登入同案回歸。

請先閱讀我附上的相關檔案或資料,資訊缺漏時精確列出需要補充的項目,不猜檔名、API 或測試結果。說明以繁體中文撰寫,指出檔案與修改位置;檢查結果區分已知、待驗與未完成。只處理學生自己的練習副本,不改現有展示網站,不要求付費訂閱。
Cursor AI 無法使用?改用 ChatGPT 備援

把上方指定的檔案內容、清單與補充資料,連同同一份 Prompt 貼入 ChatGPT 對話。只貼電腦上的路徑,無法讓它讀取你的檔案。

收到程式碼時,先核對檔名與修改位置,再手動存回自己的練習副本;若收到檢查表或補檔步驟,就逐項操作。不要把 Prompt 或程式碼框的反引號貼進 HTML/CSS。

兩邊都受限時,可先看既有參考成果、檢查差異與手動修改;未做過的 AI 生成或公開發布仍記待完成。不要貼入帳密、金鑰或真實個資。

複製只取得 Prompt 文字,檔案需自行在 Cursor 附上;本頁不會呼叫 AI 或自動完成關卡。

做完,自己確認

  • 失效後列表與明細不殘留,身份由後端重新確認。
  • 直接API仍拒絕,原登入與公開詢問保留。

線上只看前端畫面;完整操作請下載。本頁不提供案件API。把參考包解壓到新的資料夾,先讀 OPEN_REFERENCE.html,再啟動隨包後端;不要覆蓋自己的作品或案件。

下載本關可啟動參考包

看參考包啟動與資料保留步驟

留下本堂檢查紀錄

留下自己的檢查紀錄

記下實際做過的操作、差異與結果。還沒做的項目寫「待完成」。

勾選與筆記只保存在這個瀏覽器。

重設只清除勾選,網站檔案與檢查筆記都保留。

帶著這一步,繼續往前。

保留正常作品與實際檢查紀錄;未完成的操作可以回來補做。

帶著作品,進入第 21 堂