4-2、困難及解決方式

食譜網站開發問題與解決總整理


使用者驗證與授權

問題
困難點
解決方式

JWT 權限判斷錯誤

使用者是否為作者、是否登入的判斷邏輯不清楚

使用 JwtAuthFilter,透過 GetPayload() 解析 JWT;自訂 IsSelf() 方法比對是否為本人

無法正確登入 Google 帳號

不知道 Google OAuth 的授權流程與 Token 交換步驟

參考 Google OAuth 官方文件,建立 callback API,與前端討論流程,交換 access token 並取回使用者資訊,成功後產生 JWT


影片上傳與平台選擇

問題
困難點
解決方式

影片上傳成功但無法即時播放

Vimeo 上傳後需等待轉檔處理完成

使用 Vimeo API 的 transcode.status 欄位檢查轉檔狀態,轉碼完成前不顯示播放器

草稿頁預覽影片出現錯誤

無法即時同步影片狀態

分兩步操作:影片上傳成功 → 儲存草稿 → 透過 Vimeo 狀態 API 控制是否允許預覽

不確定該用哪個影音平台

缺乏橫向比較與實測

參考 YouTube / Cloudinary / Vimeo 的官方文件進行實測,成功上傳影片後回報給組員,再開會共同分析優缺點後決定使用 Vimeo: ✅ 無廣告,✅ 播放控制強,✅ API 文件完整,❌ 缺點是轉碼稍慢


API 設計與資料存取

問題
困難點
解決方式

作者無法檢視未發布食譜

API 僅撈取已發布資料,導致草稿無法瀏覽

加入判斷是否為作者,若是則允許顯示草稿

評分與留言主鍵重複錯誤

(UserId, RecipeId) 作為主鍵導致同用戶無法重複留言或評分

實作更新 vs 新增邏輯判斷,若有資料則更新,否則插入

多筆留言、評分導入時錯誤

在SSMS,未設 IDENTITY_INSERT 或關聯錯誤

插入時開啟 SET IDENTITY_INSERT,排除自己留言給自己的資料


廣告模組與點擊紀錄

問題
困難點
解決方式

點擊與曝光紀錄不一致

無法辨識匿名用戶、重複點擊問題

建立 AdViewLogs,透過 Session/Cookie 記錄一次 Session 的行為,登入後補寫 UserId

前端無法計算互動率

公式錯誤或數據不足

回傳互動率 (click / view) * 100,避免除以零錯誤時回傳 0

無法更新後台報表數據

無自動統計功能

建立後台月報查詢 API,根據時間區間統計各廣告曝光與點擊數據


圖片與表單資料上傳

問題
困難點
解決方式

無法正確接收表單與圖片

MultipartFormData 處理失敗

使用 ReadAsMultipartAsync() 拆解內容,並實作 GetFormValue() 抽取欄位資料

圖片上傳覆蓋問題

同名檔案覆蓋導致圖片遺失

使用 Guid.NewGuid().ToString("N") 產生唯一亂數檔名,避免衝突


假資料與初始化

問題
困難點
解決方式

批次插入時主鍵錯誤

ID 欄位設定錯誤或重複

使用 SET IDENTITY_INSERT 插入資料;避免重複主鍵與違反外鍵限制

留言/評分/收藏有違規資料

作者對自己留言、評分、收藏

寫入前排除 UserId == Recipe.UserId 的組合,並隨機分配資料

評分超過上限

沒有限制 5.0 上限

亂數範圍控制在 0~5,避免浮點溢出錯誤


前後端協作與團隊溝通

問題
困難點
解決方式

討論內容常常遺失

口頭討論後無紀錄,導致混亂

使用 Notion 建立討論紀錄與任務追蹤頁面,明確記下每次會議的決策

wireframe 頻繁更動

畫面流程反覆修改但沒有共識

將設計版本歷程記錄下來,與前端反覆確認可行性與 UI 邏輯性


Git 版本控制問題(個人開發)

問題
困難點
解決方式

推送被拒 (rejected (fetch first))

本地版本落後遠端導致推不上去

使用 git pull origin main --rebase 搶救衝突再推送,或 git stash 暫存修改後再同步

推送被 GitHub 阻擋(包含私密資訊)

Google OAuth 和 Vimeo 的公私鑰被誤判為機敏資訊

使用 .gitignore 忽略 bin/obj/ 及敏感檔案(如 *.key, *.json)避免被誤擋與上傳失敗


Last updated