進 /chat 先被 false for 'list' @ L75 擋住。規則其實要分 list 跟 get,而且規則沒有 request.query.where 可用。改法:list 只要登入就過;get 才驗證聊天室成員。
登入又跳 auth/network-request-failed,是我沒開 Auth Emulator,跑:
firebase emulators:start --only auth,firestore
訊息讀取出現 Property senderId is undefined。是舊資料少欄位,我在規則補 keys().hasAll([...]),再把舊訊息清掉或重 seed。
點選傳送訊息報 reads before writes,把流程改成在 runTransaction 裡先讀 thread,算好 unreadCount,再一次寫 message 和更新 thread。
src/api/chat.ts 三個錯誤訊息原本是亂碼,我全改成正常字串,順手把 sendMessage 收斂成一個交易。
後來簡化規則在本機跑通:登入可讀寫 chatThreads、可讀 messages,建立訊息時檢查 senderId 必須是本人。
開兩個瀏覽器測試,終於可以測試訊息成功Q