進 /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