第 19 堂|登入後,找到同一筆詢問

從真實登入與身份確認開始,讀列表及同id明細,分開載入與找不到。

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

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

登入成功不等於前端自行設權限

後端身份確認才讀案件,錯登入沒有私密資料。

先準備

  • 自己的service-site/frontend既有inquiry.html、inquiry.js、config.js與styles.css;管理頁本關才新增
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • 第18堂實際案件id與主旨;不含認證值的Network證據

後端驗證密碼與session,前端再讀me及案件。私密資料不能先寫在HTML或localStorage後才藏起來。

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

一起拆解:權限從後端確認

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

這次的輸入

上一堂已建立一筆實際QH-id;這堂新增登入與案件頁。

登入 → 後端設HttpOnly Cookie
GET /api/auth/me → 200
GET /api/admin/cases → 找同id

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

一步一步推演

  1. 先保留上一堂自己的資料目錄;新的管理頁與admin.js由本關新增,不能要求先附不存在檔案。
  2. 錯密碼測401;正確登入後由me確認身份,前端不讀或保存Cookie值。
  3. 在列表及明細核對第18堂同id、主旨與服務,不用預置案替代。

正常應看到

只有真正登入才讀到同一筆案件,密碼不進前端檔或AI對話。

常見錯誤對照

在前端設定isAdmin=true不能讓匿名API請求變成合法。

先預測,再說明原因

只看到登入頁跳轉,足以證明管理API受到保護嗎?

跟著觀察

  1. 先讀「權限從後端確認」的輸入,指出本關實際檔案或資料。
  2. 只看到登入頁跳轉,足以證明管理API受到保護嗎?
  3. 依例子逐步說明正常結果與錯誤差別,再記下自己的預測;參考結果不是已完成的實測。

做完,自己確認

  • 後端身份確認才讀案件,錯登入沒有私密資料。
  • 能指出指定檔案與作用範圍。
接著進行第 2 步
步驟 2/6 · 實作 42 分鐘

先確認身份,再讀案件

後端身份確認才讀案件,錯登入沒有私密資料。

先準備

  • 自己的service-site/frontend既有inquiry.html、inquiry.js、config.js與styles.css;管理頁本關才新增
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • 第18堂實際案件id與主旨;不含認證值的Network證據

先用錯密碼,再用自己設定的密碼登入,記同案id。

跟著做

  1. 記第18堂實際id、主旨與服務,不貼密碼給AI。
  2. 請AI依契約加登入、me、列表與明細,安全文字顯示。
  3. 錯誤登入不見案件;正確登入核對同案列表與明細。

建立真實管理員登入與案件查閱

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

1.附上這些檔案與資料
  • 自己的service-site/frontend既有inquiry.html、inquiry.js、config.js與styles.css;管理頁本關才新增
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • 第18堂實際案件id與主旨;不含認證值的Network證據

本關才新增,不用先附檔:service-site/frontend/admin-login.html、service-site/frontend/admin-cases.html、service-site/frontend/admin.js。請讓 AI 建立在指定位置;收到程式碼時核對檔名後自行儲存。

2.貼到哪裡
  1. 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
  2. 只用 @ 附上上方已存在的指定檔案;「本關才新增」的檔案不需要先找或先建空檔,再貼下方Prompt。
  3. 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 AI 代替驗收或提交。
3.預期回覆與操作
  • 請AI依契約加登入、me、列表與明細,安全文字顯示。
  • 列表與明細使用第18堂實際同id。
4.自己檢查結果
  • 後端身份確認才讀案件,錯登入沒有私密資料。
  • 列表與明細使用第18堂實際同id。
建立真實管理員登入與案件查閱 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堂同案延續,不以不同預置案假串接。 本堂新增兩個管理頁與admin.js;不從零重做認證、狀態更新及備註留後堂。保留APPA與紫綠色票。

本次任務:起始版已存在的檔案才需附上;本關新增service-site/frontend/admin-login.html、service-site/frontend/admin-cases.html、service-site/frontend/admin.js,不要要求先附不存在的檔案。依提供API契約新增admin-login.html、admin-cases.html與admin.js,沿用config及品牌。登入POST username/password,成功後由GET /api/auth/me確認,再讀受保護GET /api/admin/cases。以穩定id讀/api/admin/cases/:id的case,不用陣列位置。fetch credentials:include,由後端HttpOnly cookie認證,不存或記密碼/Cookie。資料以textContent/表單value呈現,401清私密DOM,錯登入不見案件;保留公開詢問。先完成基本登入、列表與同案查閱,下關才精修載入/404。列錯登入、正確登入、第18堂同id及手機鍵盤驗收。

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

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

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

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

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

做完,自己確認

  • 後端身份確認才讀案件,錯登入沒有私密資料。
  • 列表與明細使用第18堂實際同id。

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

下載本關可啟動參考包

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

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

切案前先清舊明細

載入前舊明細清除,404與斷線不混同。

先準備

  • 自己的service-site/frontend/admin-login.html、admin-cases.html、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • 正常/不存在id與明細請求、顯示前後證據

點另一案時先移除前案內容;404和一般斷線需要不同文字,不能繼續顯示上一筆。

一起拆解:切案先清掉上一筆

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

這次的輸入

先開案件A,再開不存在的B或讓B請求失敗。

選B → 先清A → 顯示載入
404 → 找不到B
連線失敗 → 說明讀取失敗

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

一步一步推演

  1. 先記畫面顯示的id,確定目前是A。
  2. 開始B請求就清A,不等待B成功;不同錯誤使用對應文字。
  3. 用?case=not-found重現404,再從列表回A確認可恢復。

正常應看到

看B失敗時不會仍看到A而誤判成B的資料。

常見錯誤對照

只有成功回應才清畫面,失敗分支會殘留上一案。

先預測,再說明原因

B的請求失敗時,畫面還能不能顯示A的聯絡資料?

跟著觀察

  1. 先讀「切案先清掉上一筆」的輸入,指出本關實際檔案或資料。
  2. B的請求失敗時,畫面還能不能顯示A的聯絡資料?
  3. 依例子逐步說明正常結果與錯誤差別,再記下自己的預測;參考結果不是已完成的實測。

做完,自己確認

  • 載入前舊明細清除,404與斷線不混同。
  • 能指出指定檔案與作用範圍。
接著進行第 4 步
步驟 4/6 · 實作 42 分鐘

讀取中與找不到,要說清楚

載入前舊明細清除,404與斷線不混同。

先準備

  • 自己的service-site/frontend/admin-login.html、admin-cases.html、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • 正常/不存在id與明細請求、顯示前後證據

手動列正常id與not-found兩條路線,記預期狀態。

跟著做

  1. 先看基本版切案與錯id的顯示。
  2. 請AI只補明細loading與404,不改認證或列表。
  3. 登入後用?case=not-found,再回列表讀同案,核對沒有殘留。

補明細載入與找不到狀態

主要使用 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只補明細loading與404,不改認證或列表。
  • 回正常id可恢復同案資料,身份機制保留。
4.自己檢查結果
  • 載入前舊明細清除,404與斷線不混同。
  • 回正常id可恢復同案資料,身份機制保留。
補明細載入與找不到狀態 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堂同案延續,不以不同預置案假串接。 本堂新增兩個管理頁與admin.js;不從零重做認證、狀態更新及備註留後堂。保留APPA與紫綠色票。

本次任務:只改善admin.js的openCase:切案前清舊明細並顯示載入中;404明示找不到此案,一般斷線顯示讀取失敗;401仍清私密內容並提示登入。保留穩定id、請求路徑與cases列表、公開詢問。避免較早請求晚回而蓋掉新選取;檢查selectedId再顯示。列正常id、?case=not-found、切回正常及手機鍵盤,不重寫認證。

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

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

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

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

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

做完,自己確認

  • 載入前舊明細清除,404與斷線不混同。
  • 回正常id可恢復同案資料,身份機制保留。

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

下載本關可啟動參考包

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

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

HTTP成功與資料形狀都要核對

明細URL與點選id一致,讀真正case。

先準備

  • 自己的service-site/frontend/admin-login.html、admin-cases.html、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • fault-L19點選id、Network URL與cases回應

明細應走:id並讀case,故障卻請求列表加query,拿到cases陣列。應修路徑,不改後端或假裝第一筆就是選定案。

一起拆解:列表與明細外層不同

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

這次的輸入

錯把明細網址寫成/api/admin/cases?id=QH-…;後端回200列表。

列表:/api/admin/cases → {cases:[...]}
明細:/api/admin/cases/實際id → {case:{...}}

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

一步一步推演

  1. 在Network完整URL確認?id=不是契約的路徑參數。
  2. 只修明細請求路徑,編碼實際id;保留後端契約。
  3. 核對200以外的JSON外層與同id,再測不存在id。

正常應看到

明細取到case且id相符;404仍有清楚文字。

常見錯誤對照

把cases[0]當明細可能拿到其他案件,即使畫面暫時有資料也不對。

先預測,再說明原因

若列表第一筆換順序,錯用cases[0]會怎麼影響這項驗收?

跟著觀察

  1. 先讀「列表與明細外層不同」的輸入,指出本關實際檔案或資料。
  2. 若列表第一筆換順序,錯用cases[0]會怎麼影響這項驗收?
  3. 依例子逐步說明正常結果與錯誤差別,再記下自己的預測;參考結果不是已完成的實測。

做完,自己確認

  • 明細URL與點選id一致,讀真正case。
  • 能指出指定檔案與作用範圍。
接著進行第 6 步
步驟 6/6 · 實作 42 分鐘

200回應,也可能用錯路徑

明細URL與點選id一致,讀真正case。

先準備

  • 自己的service-site/frontend/admin-login.html、admin-cases.html、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html與真實教學後端;只用虛構案件,不把密碼或Cookie貼給AI
  • fault-L19點選id、Network URL與cases回應

親手比較點選id、實際URL與回應外層。

跟著做

  1. 獨立fault-L19點同一案,記錯路徑與cases回應。
  2. 請AI只把明細請求改成正確:id路徑。
  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-L19點選id、Network URL與cases回應
2.貼到哪裡
  1. 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
  2. 用 @ 附上本關指定檔案,核對完整路徑;補實際觀察、輸入與結果,再貼下方 Prompt。
  3. 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 AI 代替驗收或提交。
3.預期回覆與操作
  • 請AI只把明細請求改成正確:id路徑。
  • 不改列表或後端,不用第一筆假串接。
4.自己檢查結果
  • 明細URL與點選id一致,讀真正case。
  • 不改列表或後端,不用第一筆假串接。
修復案件明細路徑 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堂同案延續,不以不同預置案假串接。 本堂新增兩個管理頁與admin.js;不從零重做認證、狀態更新及備註留後堂。保留APPA與紫綠色票。

本次任務:故障openCase把GET明細寫成/api/admin/cases?id=選取id,實際回cases列表,沒有case。只把這一處改/api/admin/cases/加encodeURIComponent(id),保留case外層檢查與loading/404/401。不要拿列表第一筆湊明細、不改後端、不用索引。列同id主旨服務、正常/找不到與手機回歸。

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

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

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

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

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

做完,自己確認

  • 明細URL與點選id一致,讀真正case。
  • 不改列表或後端,不用第一筆假串接。

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

下載本關可啟動參考包

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

留下本堂檢查紀錄

留下自己的檢查紀錄

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

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

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

帶著這一步,繼續往前。

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

帶著作品,進入第 20 堂